いくつかのファイルを含むディレクトリがあります。
mkdir _tmpmm
touch a1 b2 c3 d4
ls
# a1 b2 c3 d4
私が見つけたときㅏ出力結果にはls
ファイルのみが表示されます。a1-ls
出力には4つのファイルが表示されますが同じ行
ls | grep a
# a1
しかし、次の行を含む「file_with_names.txt」というファイルを作成すると、
cat file_with_names.txt
# a1 b2 c3 d4
# xxx
# zaz
それから何かをする
grep a file_with_names.txt
または
cat file_with_names.txt | grep a
私は得る-
# a1 b2 c3 d4
# zaz
だから私の質問は - なぜgrepingをするのですか?ㅏ出力からls
ライン全体を返しません。つまりa1 b2 c3 d4
?
ベストアンサー1
コマンドgrep
は与えられた入力と一致します。
ls
ここで入力は(悪い習慣ですが、今は無視しましょう)の出力なので、一致は次のものを含む単一のファイル名ですa
。
ls | grep a
ここで、入力は出力cat
、出力はファイルの内容ですfile_with_names.txt
。
cat file_with_names.txt | grep a
4つのファイル名を含む現在表示されてgrep
いる出力と一致しない理由を尋ねると、これは人間が見ることができるように端末に書き込んでいるかどうか、およびその後のビューのためにパイプに書き込んだかどうかに応じて異なる出力を生成するためです。 。パイプに書き込むときにどの出力が出るかを確認するには、次の手順を試してください。ls
ls
ls | cat
通常、出力を解析しないことをお勧めしますls
。通常、ファイル名のリストを取得するより良い方法があります。