这正如我预期的那样:
$ 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 在他对这个问题的评论中提供了解释(在执行命令之前解释重定向)。我的解决方法是在读取文件和写回文件之间添加一个间接级别。