2014-01-19 58 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腳本中。 –

相關問題