使用重定向通过 sed 修改文件

使用重定向通过 sed 修改文件

这正如我预期的那样:

$ cat in
abc 123
$ sed -E -i .bk 's/[0-9]+/(&)/' in
$ cat in 
abc (123)
$ cat in.bk
abc 123 

但不是这个:

$ cat in
abc 123
$ sed -E 's/[0-9]+/(&)/' in 
abc (123)
$ sed -E 's/[0-9]+/(&)/' in > in
$ cat in 

我怎样才能修改上面的命令集,以便最后一条命令返回:

abc (123)

答案1

sed -i -E 's/[0-9]+/(&)/' in

或者,

sed -E 's/[0-9]+/(&)/' in | tee in

覆盖文件并在标准输出上提供输出。

答案2

问题:sed使用以下方法修改文件重定向

回答:显然,-i添加开关是sed有原因的。只需使用重定向让你看到一个有点复杂的解决方案。

cat in | cat - | sed -E 's/[0-9]+/(&)/' > in

以下方法也有效,但前提是输入文件包含单行:

cat in | parallel 'echo {} | sed -E "s/[0-9]+/(&)/" > in'

sed -E 's/[0-9]+/(&)/' in | parallel 'echo {} >in'

解释: Paulo 在他对这个问题的评论中提供了解释(在执行命令之前解释重定向)。我的解决方法是在读取文件和写回文件之间添加一个间接级别。

相关内容