どのようにstdout(またはstderr)とファイルの結果を最終ファイルにリンクするのですか?
例えば
ls -a | grep text1
中間コンテンツに保存せずにANDをfile2.txt
最終結果(ではないfile2.txt
)にリンクします。grep text1
grep 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 -a
stderrに何も出力する可能性がないため、ファイルに何も入れないことがあります。
編集:結果をファイルにリダイレクトするのではなく、別のプログラムにパイプするには、名前付きパイプを使用できます。
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
コピーを作成する場合cat
ls
grep
cat
file2.txt
同じ共有標準出力で。通常、これによりパイプの数が減ります。
...または...
ls -a | sed -ne'$r file2.txt' -e'/text1/p' >outfile
これは一致するコンテンツのみを印刷し、出力への入力をsed
表し、フィルタリングします。grep
text1
正規表現。$
最後の出力に達すると、ls
現在のラインサイクルが完全に完了した後に出力をr
スケジュールしますfile2.txt
。したがって、一度印刷されます。(または印刷しない)出力の最後の行にもls
すべてを標準出力にコピーします。file2.txt