LINUX-我的代码在sed中出了什么问题?

时间:2014-01-19 03:04:27

标签: sed

我想替换

ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"
PIDFile=/home/<USER>/.vnc/%H %i.pid

ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"    
PIDFile=/root/.vnc/%H %i.pid

我试过了:

sed -i 's$ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i" \n PIDFile=/home/<USER>/.vnc/%H %i.pid$ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i" \n PIDFile=/root/.vnc/%H %i.pid$g' file

我使用$而不是/来表示特殊字符。但这不起作用,没有任何东西被编辑。

请告诉我我错过了什么。 THX。

得到了Soution.Thx给回答者:):

sed -i 's$ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i"$ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"$g' uu && sed -i 's$PIDFile=/home/<USER>/.vnc/%H %i.pid$PIDFile=/root/.vnc/%H %i.pid$g' uu 

1 个答案:

答案 0 :(得分:1)

sed主要一次只能在一行上运行,因此您需要定义两个单独的替换操作,每行一个:

sed -e 's/-l <USER> -c/-l root -c/' \
    -e 's%home/<USER>%root%' \
    file

请注意s之后的字符是正则表达式的分隔符。我没有乱用反斜杠,而是在第二步更改为%以避免与斜杠碰撞。

如果你真的很担心,你可以让你的比赛更多,但我所展示的不太可能让你失望。您希望/root替换/home/<USER>,这很奇怪。使用<HOME>之类的标记可以做得更好,可以正确设置。