grep は元のコンテキストにない結果を提供します。

grep は元のコンテキストにない結果を提供します。

私はUnixに初めて触れ、現在起こっていることをたくさん触れました。

コマンド(例ps -eo 'tty,pid,comm':)を入力すると、テキストが返されます。私が理解しているように、結果をパイプで連結すると出力が取得され、そのgrep出力から結果が返されるはずです。

それでは、コマンドとはまったく異なる結果が表示されるのはなぜですかps?元のコマンドの形式ではなく、ps設定ファイルのように見えるあいまいな情報を含む非常に長いテキストを受け取りました。

答え1

あなたのコメントによると、表示される出力は次のとおりです。名前その種類の最初のファイルです。その理由は、?grepコマンドの文字が実行前にシェルによって拡張されるためです。

したがって、psコマンドは期待どおりに実行されますが、grepはコマンドラインからファイルをgrepingする代わりにその入力を完全に無視します。

次の手順を実行して自分自身を証明します。

mkdir ~/tempdir
cd ~/tempdir
ps -eo 'tty,pid,comm' | grep ?

これにより(ファイルなし)空のディレクトリが作成され、拡張が?失敗し、grepに直接渡されます。次に、次のように2つのファイルを作成します。

touch a
echo thisisfilebwithana > b

次に、次のようにgrepを再実行します。

grep ?

あなたは見るでしょう

thisisfilebwithana

grep私はこれを見たので:

grep a b

これは、「'a'を含むファイルbのすべての行を表示する」と解釈されます。

代わりにあなたがしたいことは疑問符を避けることです:

ps -eo 'tty,pid,comm' | grep \?

または

ps -eo 'tty,pid,comm' | grep '?'

関連情報