我一直在寻找一种方法来查找和替换当前目录中所有fortran文件中的字符串。这里的大多数答案都与使用相关:
sed -i 's/INCLUDE \'atm/params.inc\'/USE params/g' *.f
或
perl -pi -w -e 's/INCLUDE \'atm/params.inc\'/USE params/g' *.f
然而,当我使用其中任何一个时,bash行继续>弹出下一行,好像它正在期待输入或另一个参数。我还没有看到其他人遇到这个,我不知道该怎么做。我的命令是不正确的;我错过了什么吗?
答案 0 :(得分:4)
原作有两个问题:
/
不被sed
解析而是被视为数据。一种非常易读且明确的方法是使用[/]
。您尝试使用\'
将文字'
放入单引号字符串中。这不起作用。常见的习语是'"'"'
,它逐个字符地执行以下操作:
'
- 退出原始单引号上下文"
- 打开双引号上下文'
- 添加文字单引号(受周围双引号保护)"
- 结束双引号上下文'
- 恢复外部单引号上下文。因此,请考虑:
# note: this works with GNU sed, not MacOS sed or others
sed -i 's/INCLUDE '"'"'atm[/]params.inc'"'"'/USE params/g' *.f