我想编辑/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
关键字的其他行。我做错了什么?
谢谢, 约翰
答案 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"
总是在脚本和字符串周围使用单引号,除非你需要双引号来扩展变量或出于其他原因,并且总是使用引号句子,除非你不需要使用它们来允许分词,扩展等等。