ストリーム編集ツール:キャプチャされたコンテンツ出力

ストリーム編集ツール:キャプチャされたコンテンツ出力

grep、cut、sed、awk、perlなどの他のストリーム編集およびテキスト処理/操作ツールを使用するときにこれが可能かどうか疑問に思います。出力の反対(つまり、コマンドの実行時に抽出されなかった内容)を一般的な方法で出力(ファイルまたはSTDOUT形式)にする方法はありますか?ツール機能とオプションのロゴを完成させます。

たとえば、

これにより、正規表現に一致するファイルの行が印刷されます。

sed '/regexp/!d

これにより、正規表現と一致しないファイルの行が印刷されます。

sed '/regexp/d'

sedオプションを使用せずに一般的なアプローチを使用してから、awkまたはgrepコマンドに適用してこれらのコマンドのいずれかを実行し、どこかにSTDOUTなしでデータを出力できますか?

これを行い、connを使用してsedコマンドをファイルに出力し、元のファイルを出力ファイルと比較して違いを出力できます。次のようなものです(構文が正しくないと確信していますが、論理が達成可能であることを願っています)。

comm <(sort originalFile) <(sort sedProcessedFile) > originalFileMinussedProcessedFile

源泉

ただし、sedだけでなく、あらゆる種類のテキスト/ストリーム操作ツール、または少なくともawkとPerl用です。

答え1

これに対する一般的なアプローチはありません。フィルタはストリームを読み書きするだけで、ストリームを内部で変更せず、フィルタ間の関係は完全に任意であり、特定のツールによって異なります。したがって、一般的なメカニズムは、入力から何かが「削除」されたことを知らないため、出力にコピーするために保存することはできません。

awkただし、同じツールはperl任意のファイル自体に書き込むことができるため、明示的なコードを使用してこれを実行できます。

awk '/regexp/ { print } !/regexp/ { print > "non-matching.txt" }' > matching.txt

関連情報