SED:匹配一行并追加到

时间:2017-09-21 14:13:11

标签: string sed

我想编辑/etc/init.d/syslog文件(嵌入式系统上的忙箱类型)。

我需要找到包含字符串$REMOTE"的ONE行(带有结尾双引号),并在此行附加一个字符串,但在结束双引号之前。

这是整个字符串:

SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE"

我想将-R 172.17.xx.xxx追加到此行,然后使用相应的双引号结束该行:

SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE -R 172.17.xx.xxx"

我试过了:

sed -i -e "/$REMOTE\"$/s/\"$/ -R 172.17.87.6\"/" init.d/syslog

...但是它会将新字符串附加到没有$REMOTE关键字的其他行。我做错了什么?

谢谢, 约翰

2 个答案:

答案 0 :(得分:0)

$在正则表达式中具有特殊含义,它表示行的结尾。你应该逃避它,或使用字符类:

sed '/[$]REMOTE"/s/$/your replacement/' file

答案 1 :(得分:0)

通过将脚本括在双引号中,您要求shell扩展变量,以便它看到:

sed -i -e "/$REMOTE...

它将$REMOTE扩展为,可能是空字符串。所以不要这样做:

$ sed 's/\($REMOTE\)\"$/\1 -R 172.17.87.6"/' file
SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE -R 172.17.87.6"

总是在脚本和字符串周围使用单引号,除非你需要双引号来扩展变量或出于其他原因,并且总是使用引号句子,除非你不需要使用它们来允许分词,扩展等等。