我有一个sed文件,用其他字符串替换文件中所有出现的字符串。 我想内联但不使用终端的-i 对.sed文件进行了哪些更改
#!/bin/sed
s/include/\#include/
答案 0 :(得分:0)
只需使用awk:
{ sub(/include/,"#include"); rec = rec $0 RS }
END{ printf "%s", rec > FILENAME }
或者如果你想严格操作字符串:
BEGIN{ old="include"; new="#include" }
s = index($0,old) {$0 = substr($0,1,s-1) new substr($0,s+length(old))
{ rec = rec $0 RS }
END{ printf "%s", rec > FILENAME }
可以简化为:
s = index($0,"include") {$0 = substr($0,1,s-1) "#" substr($0,s)
{ rec = rec $0 RS }
END{ printf "%s", rec > FILENAME }
在这个特殊情况下只需将#
添加到字符串中。
答案 1 :(得分:0)
我认为它不会起作用,因为-i
和-f
选项通常都有参数,但你可能会很幸运。
shebang行可以包含一个选项组(也称为群集)。您需要它包含-f
(这在您的示例中缺少),因此群集可能看起来像
#!/bin/sed -if
前提是您的方言不需要-i
选项的参数,并且首先允许这样的聚类(-if
专业-i -f
)。
明显的解决方法是将脚本更改为shell脚本;不再需要-f
选项,因为脚本不在文件中。
#!/bin/sh
exec sed -i 's/include/\#include/' "$@"