我想替换
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
答案 0 :(得分:1)
sed
主要一次只能在一行上运行,因此您需要定义两个单独的替换操作,每行一个:
sed -e 's/-l <USER> -c/-l root -c/' \
-e 's%home/<USER>%root%' \
file
请注意s
之后的字符是正则表达式的分隔符。我没有乱用反斜杠,而是在第二步更改为%
以避免与斜杠碰撞。
如果你真的很担心,你可以让你的比赛更多,但我所展示的不太可能让你失望。您希望/root
替换/home/<USER>
,这很奇怪。使用<HOME>
之类的标记可以做得更好,可以正确设置。