标题说的是:假设sed
从STDIN
1读取它的输出可以是一个文本文件吗?
为了清楚起见,我不是在谈论sed
通过 shell 操作符(如>
)>>
或使用诸如tee
等
的工具将的输出保存到文本文件。这里的问题是是否可以sed
单独生成文本文件形式的输出,如果那么,在什么情况下?
1:这只是为了排除具有支持它的实现的文本文件的任何就地编辑。
Ste*_*itt 10
是的,使用w
命令或命令的w
标志s
,两者都由 POSIX 指定。
例如,与
sed -n 'w output.txt'
Run Code Online (Sandbox Code Playgroud)
任何输入sed
的标准输入的内容都将写入output.txt
,而没有输出到sed
的标准输出(感谢-n
选项)。这可以与其他命令结合使用,以在写出模式空间之前对其进行操作。
一些警告和建议的注意事项:
如果文件名以空白开头,请使用./
前缀:
sed -n 'w ./ output with blanks.txt'
Run Code Online (Sandbox Code Playgroud)
如果文件名包含换行符,POSIXly,您可以使用反斜杠将它们转义,尽管它不适用于所有sed
实现(特别是不适用于 GNUsed
或 busybox sed
):
sed -n 'w ./output\
with\
newline.txt'
Run Code Online (Sandbox Code Playgroud)
如果它包含反斜杠字符,在某些实现中(上面的 POSIX 支持文件名中的换行符),您需要使用反斜杠将它们转义:
sed -n 'w file\\with\\backslash.txt' # POSIX
sed -n 'w file\with\backslash.txt' # GNU
Run Code Online (Sandbox Code Playgroud)
另请注意,即使输入为空或w
命令从未像以下那样运行,也会创建(或截断)输出文件:
sed 'd;w file'
Run Code Online (Sandbox Code Playgroud)
或者
seq 20 | sed '/21/ w file'
Run Code Online (Sandbox Code Playgroud)
您可能想awk
改用以避免此类问题
FILE=arbitrary-file-name awk '/100/ {print > ENVIRON["FILE"]}'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
865 次 |
最近记录: |