標準出力をファイルの内容に関連付けます。

標準出力をファイルの内容に関連付けます。

どのようにstdout(またはstderr)とファイルの結果を最終ファイルにリンクするのですか?

例えば

ls -a | grep text1

中間コンテンツに保存せずにANDをfile2.txt最終結果(ではないfile2.txt)にリンクします。grep text1grep text1 > file1.txt

答え1

ls -a | grep text1 | cat file2.txt -

-標準入力を示します。それとも書くことができます。

ls -a | grep text1 | cat - file2.txt

別の順序で出力します。


プロセス置換を使用した別の可能性:

cat <(ls -a | grep text1) file2.txt

または他の順序で:

cat file2.txt <(ls -a | grep text1)

答え2

{}または、コマンドを結合して()結合出力をリダイレクトすることもできます。

{ 
  cat file1.txt
  echo "Now the ls/grep"
  ls -a |grep foobar
} > file2.txt

個人旅行者として:

{ cat file1.txt; echo "Now the ls/grep"; ls -a |grep foobar; } >file2.txt 

最後のビット;が必要です。

答え3

file2.txt以下を実行して最後に追加できます。

ls -a | grep text1 >> file2.txt

または別のファイルに入れたい場合

ls -a | grep text1 > output.txt
cat file2.txt >> output.txt

stdoutの代わりにstderrが必要な場合

ls -a | grep text1 2>> output.txt

ls -astderrに何も出力する可能性がないため、ファイルに何も入れないことがあります。

編集:結果をファイルにリダイレクトするのではなく、別のプログラムにパイプするには、名前付きパイプを使用できます。

mkfifo pipe1
cat pipe1 | next program &
ls -a | grep text1 >> pipe1
cat file2.txt >> pipe1

答え4

ls -a | { grep text1; cat file2.txt; } >outfile

出力がフィルタ処理されたときに開始されたプロセスと共有されるls標準出力に書き込まれます。grepコピーを作成する場合catlsgrepcatfile2.txt同じ共有標準出力で。通常、これによりパイプの数が減ります。

...または...

ls -a | sed -ne'$r file2.txt' -e'/text1/p' >outfile

これは一致するコンテンツのみを印刷し、出力への入力をsed表し、フィルタリングします。greptext1正規表現。$最後の出力に達すると、ls現在のラインサイクルが完全に完了した後に出力をrスケジュールしますfile2.txt。したがって、一度印刷されます。(または印刷しない)出力の最後の行にもlsすべてを標準出力にコピーします。file2.txt

関連情報