我有一个sed文件,用其他字符串替换文件中所有字符串。 我想这样做在线,但没有使用-i从终端 什么变化的.sed文件sed命令文件中的标志
#!/bin/sed
s/include/\#include/
我有一个sed文件,用其他字符串替换文件中所有字符串。 我想这样做在线,但没有使用-i从终端 什么变化的.sed文件sed命令文件中的标志
#!/bin/sed
s/include/\#include/
只需使用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 }
在这种特殊情况下,只是将#
预先设置为一个字符串。
我不认为它会工作,因为-i
和-f
选项通常都可以有参数,但你可能是幸运的。
shebang行可以包含一个选项组(又名集群)。你会需要它包含-f
(这是从你的榜样缺失),因此集群可能看起来像
#!/bin/sed -if
前提是你的话并不需要的参数来-i
选项,并在允许集群这样的第一名(-if
专业-i -f
)。
明显的解决方法是将脚本更改为shell脚本; -f
选项不再需要,因为该脚本不在文件中。
#!/bin/sh
exec sed -i 's/include/\#include/' "[email protected]"
我不认为你可以做到这一点。 'sed'命令文件只能包含命令,而不能包含选项。 – Barmar 2014-09-01 09:31:33
尝试(我猜)'#i'在脚本/动作列表的第一行。它适用于'-n',所以可能也适用于其他选项 – NeronLeVelu 2014-09-01 10:50:08
不可以,它不起作用@NeronLeVelu – saisandeep 2014-09-01 10:54:17