假设您要在包含模式的所有文件中进行编辑。 例如,将所有“2017”更改为“2018”。 对于 perl、sed 和其他各种语言,存在许多建议。 如果 ed 编辑器可以工作的话,它会简单得多。
给定一个文件:
$ echo 2017 > fubar
为什么这不起作用
$ ed fubar <<< ',s/2017/2018/g\nw\n'
6
?
$ cat fubar
2017
$
当发生这种情况时。
$ printf ',s/2017/2018/g\nw\n'|ed fubar
6
7
$ cat fubar
2018
$
最后会在这样的循环中使用
$ for i in `grep -r -l 2018`; do ed $i <<< ',s/2017/2018/g\nw\n'; done
最佳答案
printf
将 \n
转义序列转换为换行符。 shell 中的普通字符串没有这样的翻译,并且 ed
本身也无法识别它,因此无法理解并且会出现错误。
您可以使用 bash
$'...'
字符串来执行转义序列转换。
ed fubar <<< $',s/2017/2018/g\nw\nq\n'
我还在末尾添加了一个显式的 q
命令。在我的 Mac OS 系统上,如果 ed
读取 EOF,我会收到 ?
警告。
您还可以使用此处文档:
ed fubar <<EOF
,s/2017/2018/g
w
q
EOF
关于bash - ed HERELINE 替代模式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48328431/