次のような変数があります。
$ echo "$LIST"
file1: ok
file2: ok
file3:
file4:
file5: ok
その後、異常なファイルのリストをインポートする必要があります。
$ sed '/:\s.\+$/d' <<< "$LIST"
file3:
file4:
ファイルは有効ですが、リストに異常なファイルがない場合は、次のことが発生します。
$ echo "$LIST"
file1: ok
file2: ok
file3: ok
file4: ok
file5: ok
$ sed '/:\s.\+$/d' <<< "$LIST"
$ NEWLIST=$(sed '/:\s.\+$/d' <<< "$LIST")
$ echo "$NEWLIST"
$ cat -A <<< "$NEWLIST"
$
$ wc -l <<< "$NEWLIST"
1
$ wc -c <<< "$NEWLIST"
1
この変数に追加された改行文字(\ nのようです)は、ファイルがwc -l
いくつあるかを知るために使用されるため、ファイルがリストされていると識別するため、私のプログラムを混乱させます。 \ nがbashまたはsedによって割り当てられたかどうかは完全にはわかりません。誰もが解決策を知っていますか?
ベストアンサー1
アイテムのみを除外する場合は、ok
次のことができます。
grep -cv ': ok$' <<< "$LIST"
または似ていますが、ほぼ反対です。
grep -c ':$' <<< "$LIST"
編集:@ilkkachuのコメントに基づいて
リストが完全に空の場合は、-vc
いくつかの動作のためにバリアントが1という数を誤って報告します<<<
。
空のリストを検出するためにガードを追加するか、単にパイプを使用することができます。
printf "%s" "$LIST" | grep -vc ": ok$"
リストに空白行が含まれていると、使用時に計算エラーが発生する可能性があります-vc
。
いずれの場合も、誤った計算を防止するために更なる修正を行うことができる。
grep -vcE "^$|: ok$"
しかし今、私たちはコードを理解するのが難しくなり始めます。