さらに使用するためにgrepの結果を変数に割り当てたい:
lines=`cat abc.txt | grep "hello"`
しかし、私が見つけたのは$ linesに改行文字が含まれていないことです。
echo $lines
1行のみが印刷されます。改行文字を保持するにはどうすればよいですか。したがって、$ linesをエコーすると、cat abc.txt | grep "hello"と同じになります。
回答:
回答№1の場合は36言いたい
echo "$lines"
の代わりに
echo $lines
詳しくは:
echo $lines
は、「置き換えて新しいコマンドを作成 $lines
という名前の変数の内容 lines
、それを空白で分割して、0個以上の新しい引数を作成します echo
コマンド。例えば:
lines="1 2 3"
echo $lines # equivalent to "echo 1 2 3"
lines="1 2 3"
echo $lines # also equivalent to "echo 1 2 3"
lines="1
2
3"
echo $lines # also equivalent to "echo 1 2 3"
シェルは変数に格納されている個々の単語間の特定の種類の空白を無視するため、これらの例はすべて同等です。 lines
。実際、より正確に言うと、シェルは変数の内容を特殊文字の文字に分割します IFS
(Internal Field Separator)変数。デフォルトでは(少なくとも私のバージョンのbashでは)3文字のスペース、タブ、および改行になります。
echo "$lines"
一方、変数の正確な値から単一の新しい引数を形成することを意味します lines
.
詳細については、bashのマニュアルページの「拡張」および「単語分割」セクションを参照してください。
回答№2の場合は0
grepにWindowsポートを使用します(元の質問ではなく、* nixには適用されません)。見つけた -U
問題をうまく解決しました。
から --help
:
-U、-binaryはEOLでCR文字を除去しません(MSDOS)