Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用sed命令在bash脚本文件中的特定模式后追加行时不断出现错误_Bash_Macos_Shell_Sed - Fatal编程技术网

在使用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变体,它不像GNU
sed
版本那样宽容(或者,它更接近POSIX规范,并且不像GNU
sed
那样严重地扭曲规则)。特别是
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变体,它不像GNU
sed
版本那样宽容(或者,它更接近POSIX规范,不会像GNU
sed
那样严重扭曲规则)。特别是
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