2014-01-19 57 views
0

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

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

更换

ExecStart=/sbin/runuser -l <USER> -c "/usr/bin/vncserver %i" 
PIDFile=/home/<USER>/.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 

我使用$来代替/特殊字符。但是这并不奏效,没有任何东西正在被编辑。

请告诉我,我错过了什么。谢谢。

得到了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

sed主要工作在一行的时间,所以你需要定义两个不同的替代操作,每行一个:

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

请注意,s之后的字符是正则表达式的分隔符。第二次,我改为%,以避免与反斜杠相撞。

如果你真的很担心,你可以让你的比赛匹配更多,但我表现不太可能令你失望。奇怪的是你想/root来代替/home/<USER>。您可以使用像<HOME>这样的标记更好地进行设置,这些标记可以正确设置。

+0

谢谢!这工作!使用: 'sed的-i的$ ExecStart =/sbin目录/ runuser -l -c “在/ usr/bin中/ vncserver的%I” $ ExecStart =/sbin目录/ runuser -l根-c“在/ usr/bin中/的vncserver%I“$ G” UU && SED -i的$ PIDFILE = /家庭/ /.vnc/%H%i.pid $ PIDFILE = /根/ .vnc /%H%i.pid $ G'UU ' – user228046

+1

OK - 的作品太多,但你可以用一个'sed'命令做这一切,如图所示。您可以使用多行命令,特别是在shell脚本中。 –

相关问题