在使用sed命令在bash脚本文件中的特定模式后追加行时不断出现错误
我有一个在使用sed命令在bash脚本文件中的特定模式后追加行时不断出现错误,bash,macos,shell,sed,Bash,Macos,Shell,Sed,我有一个config.xml文件和一个bash脚本文件。我想使用bash脚本向config.xml追加一行,并将结果保存在config.xml中。 例如,每当config.xml中有“Cordova”一词时,我想附加一行“it never works”。所以我用了: sed '/Cordova/ a\ it never works' config.xml 我得到了一个错误“sed:1:“/Cordova/a\it never works”:在命令的结尾处的\后面额外的字符 我该如何解决这个问题
config.xml
文件和一个bash脚本文件。我想使用bash脚本向config.xml追加一行,并将结果保存在config.xml中。
例如,每当config.xml
中有“Cordova”一词时,我想附加一行“it never works”。所以我用了:
sed '/Cordova/ a\ it never works' config.xml
我得到了一个错误“sed:1:“/Cordova/a\it never works”:在命令的结尾处的\后面额外的字符
我该如何解决这个问题
我在终端命令行使用Mac。Mac上的sed
版本是BSD变体,它不像GNUsed
版本那样宽容(或者,它更接近POSIX规范,并且不像GNUsed
那样严重地扭曲规则)。特别是a
等命令需要在一行末尾加反斜杠,在下一行加上剩余的材质:
sed '/Cordova/ a\
it always works like this, even with GNU sed' config.xml
如果要添加多行,则除了最后一个带有反斜杠的端点之外,其他所有行都要添加
sed '/Cordova/ a\
it always works like this\
even with GNU sed' config.xml
请注意,这两个选项都不会在附加的材质后添加换行符。为此,您需要:
sed '/Cordova/ a\
it always works like this, even with GNU sed
' config.xml
还要注意的是sed
消除了附加材料中的前导空格。Mac上的sed
版本是BSD变体,它不像GNUsed
版本那样宽容(或者,它更接近POSIX规范,不会像GNUsed
那样严重扭曲规则)。特别是a
等命令需要在一行末尾加反斜杠,在下一行加上剩余的内容:
sed '/Cordova/ a\
it always works like this, even with GNU sed' config.xml
如果要添加多行,则除了最后一个带有反斜杠的端点之外,其他所有行都要添加
sed '/Cordova/ a\
it always works like this\
even with GNU sed' config.xml
请注意,这两个选项都不会在附加材料后添加换行符。为此,您需要:
sed '/Cordova/ a\
it always works like this, even with GNU sed
' config.xml
还要注意的是,sed
消除了附加材料中的前导空格。sed仅用于单个行上的简单替换。对于任何其他内容,为了软件的清晰性、健壮性、可移植性、效率和其他最理想的品质,您都应该使用awk:
awk '{print} /Cordova/{print "it ALWAYS works"}' config.xml
sed仅用于单个行上的简单替换。对于任何其他内容,为了软件的清晰性、健壮性、可移植性、效率和其他最理想的品质,您都应该使用awk:
awk '{print} /Cordova/{print "it ALWAYS works"}' config.xml