sed命令文件中的标志

时间:2014-09-01 09:23:57

标签: sed

我有一个sed文件,用其他字符串替换文件中所有出现的字符串。 我想内联但不使用终端的-i 对.sed文件进行了哪些更改

#!/bin/sed 
s/include/\#include/ 

2 个答案:

答案 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/' "$@"