bashに\ nを変数に割り当てないようにする方法を教えてください。

bashに\ nを変数に割り当てないようにする方法を教えてください。

次のような変数があります。

$ 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$"

しかし今、私たちはコードを理解するのが難しくなり始めます。

おすすめ記事