只要输入来自 STDIN,sed 就可以自行生成文本文件形式的输出吗?

只要输入来自 STDIN,sed 就可以自行生成文本文件形式的输出吗?

标题说的是什么:假设sedSTDIN1读取,它的输出可以是一个文本文件吗?
需要明确的是,我并不是在谈论sed通过 shell 运算符(如 )将 的输出保存到文本文件>>>或使用诸如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'

如果文件名包含换行符,POSIXly,您可以使用反斜杠对其进行转义,尽管它不适用于所有sed实现(特别是不适用于 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"]}'

相关内容