2010-11-05 85 views
1

在Linux尾隨反斜線(\)結束的行(BusyBox的,QNAP的NAS)我想用SED通過腳本添加一些額外的路徑,我.bashrc文件。該文件的相關部分看起來如下:插入(或追加)使用SED

[...] 
export PATH=\ 
/bin:\ 
/sbin:\ 
/usr/bin:\ 
/usr/sbin:\ 
/usr/local/bin 
[...] 

額外線(在原始文件中第4位)被插入爲/opt/bin:/opt/sbin:\。爲了做到這一點,我的sed單線程看起來像這樣:

sed '4i/opt/bin:/opt/sbin:\\' .bashrc > .bashrc.tmp 

,正確地轉義尾部反斜槓。不知怎的,sed的轉換剩餘\'成一個換行符吃起來尾部的反斜槓,導致:

[...] 
export PATH=\ 
/opt/bin:/opt/sbin: 

/bin:\ 
[...] 

添加第三個反斜槓給我尾部的反斜槓,但仍增加了換行,所以

sed '4i/opt/bin:/opt/sbin:\\\' .bashrc > .bashrc.tmp 

結果到

export PATH=\ 
/opt/bin:/opt/sbin:\ 

/bin:\ 

如果我在sed的命令添加一個額外的空間

sed '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp 

一切看起來不錯,但我在行尾也得到了額外的空間。

export PATH=\ 
/opt/bin:/opt/sbin:\ # extra space here 

/bin:\ 

什麼了,現在關鍵是第二sed命令刪除後面的空格

#!/bin/sh 

sed -e '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp 
sed -e 's/[ \t]*$//' .bashrc.tmp > .bashrc.tmp2 # change \t to real tab 

但我仍想知道爲什麼SED正在轉變\'成一個換行符,以及如何解決上述工作一個簡單的單線?我怎樣才能插入(或附加)用斜槓線使用的sed? 在此先感謝。

回答

1

這裏有一個解決方法:

sed '4s|^|/opt/bin:/opt/sbin:\\\n|' .bashrc 
+0

作品般的魅力,謝謝。 – skipperTux 2010-11-05 20:18:23

+0

克里斯托夫,您可以通過點擊「嘀」接受的答案。 – 2011-01-10 20:58:47

0

看起來像sed BusyBox中的錯誤。它適用於GNU sed 4.2.1。

+0

哦,我應該檢查在首位。它適用於我的Debian/Ubuntu和GNU sed 4.2.1。因此,BusyBox sed中存在一個錯誤。現在我可以堅持我的兩個內膽,但我喜歡丹尼斯的解決方法更好。 – skipperTux 2010-11-05 20:17:41

0

如果任何幫助,我用四個反斜槓在一行的OND追加一個反斜槓沒有空間。

我的命令如下:

sed "1i #backtrace_script\n#!/bin/sh\ngeany -si \\\\" \ 

導致

#!/bin/sh 
geany -si \