sed命令文件中的标志

sed命令文件中的标志,sed,Sed,我有一个sed文件,它用其他字符串替换文件中出现的所有字符串。 我想以内联方式执行此操作,但不使用-I from terminal 要对.sed文件进行哪些更改 #!/bin/sed s/include/\#include/ 只需使用awk: { sub(/include/,"#include"); rec = rec $0 RS } END{ printf "%s", rec > FILENAME } 或者,如果要严格操作字符串: BEGIN{ old="include"; ne

我有一个sed文件,它用其他字符串替换文件中出现的所有字符串。 我想以内联方式执行此操作,但不使用-I from terminal 要对.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行可以包含一个选项组(aka cluster)。您需要让它包含
-f
(您的示例中缺少此项),以便集群看起来像

#!/bin/sed -if
前提是您的方言不需要
-i
选项的参数,并且首先允许这样的集群(
-if
pro
-i-f

显而易见的解决方法是将脚本更改为shell脚本;由于脚本不在文件中,因此不再需要
-f
选项

#!/bin/sh
exec sed -i 's/include/\#include/' "$@"

我认为你做不到
sed
命令文件只能包含命令,不能包含选项。请在脚本/操作列表的第一行尝试(我猜)
#i
。它适用于
-n
,因此可能也适用于其他选项Nope,它不适用@neronlevelut要清楚,您的脚本不是用字符串替换字符串,而是替换一个可以包含字符子集的regexp(例如,完全不允许/和.,*,等等不是文字,转义时,+,?等可能具有非文字意义)使用可以包含不同字符子集的字符串(例如数字前的no/、&或\)。对那个特别的纸牌屋要非常小心!