入力がSTDINから来る限り、sed自体はテキストファイルの形式で出力を生成できますか?

入力がSTDINから来る限り、sed自体はテキストファイルの形式で出力を生成できますか?

件名:1sedから読むと仮定すると、出力はテキストファイルになりますか?明らかに、同じシェル演算子を使用したり、そのようなツールを使用して出力をテキストファイルに保存したりするのではありません。ここでの質問は次のとおりです。STDIN
sed>>>tee
sed ホロ出力をテキストファイル形式で作成できますか?では、どのような状況で製作されますか?


1: これは、これをサポートする実装を使用してテキストファイルを内部で編集することを排除するためのものです。

ベストアンサー1

はい、wコマンドを使用するか、コマンドwのすべてのフラグをs使用してください。POSIXで指定

例えば、

sed -n 'w output.txt'

標準入力に入力されたすべての内容sedはに記録されますが、標準出力output.txtには何も出力されません(このオプションのsedおかげで)。-nこれは、パターン空間を書き込む前に、パターン空間で動作するために他のコマンドと共に使用することができる。

いくつかの警告と提案:

ファイル名が空白で始まる場合は、プレフィックスを使用してください./

sed -n 'w ./ output with blanks.txt'

sedファイル名に改行文字POSIXlyが含まれている場合は、バックスラッシュでエスケープできます。ただし、すべての実装で動作するわけではありません(特にGNUsedまたはbusyboxでは動作しませんsed)。

sed -n 'w ./output\
with\
newline.txt'

バックスラッシュ文字が含まれている場合、一部の実装では(上記のPOSIXはファイル名の改行をサポートしています)、バックスラッシュを使用してエスケープする必要があります。

sed -n 'w file\\with\\backslash.txt' # POSIX
sed -n 'w file\with\backslash.txt'   # GNU

また、入力が空であってもコマンドがw実行されなくても、出力ファイルは次のように生成または切り捨てられます。

sed 'd;w file'

または

seq 20 | sed '/21/ w file'

awkこれらの問題を回避するために代わりに使用できます。

FILE=arbitrary-file-name awk '/100/ {print > ENVIRON["FILE"]}'

おすすめ記事