「grep」が一般的な「ls」コマンドとは少し異なる結果を与えるように見えるのはなぜですか? [コピー]

「grep」が一般的な「ls」コマンドとは少し異なる結果を与えるように見えるのはなぜですか? [コピー]

いくつかのファイルを含むディレクトリがあります。

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いる出力と一致しない理由を尋ねると、これは人間が見ることができるように端末に書き込んでいるかどうか、およびその後のビューのためにパイプに書き込んだかどうかに応じて異なる出力を生成するためです。 。パイプに書き込むときにどの出力が出るかを確認するには、次の手順を試してください。lsls

ls | cat

通常、出力を解析しないことをお勧めしますls。通常、ファイル名のリストを取得するより良い方法があります。

おすすめ記事