2015-01-06 149 views
0

我試圖刪除BASH中某個變量的一些內容。我特別想刪除以下部分從變量$ USER部分:用Sed替換變量的內容

<username><![CDATA[ 

我的代碼如下所示:

NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER` 

我用反斜槓轉義特殊字符(我不知道是否正確),並想從$ USER中刪除提及的部分,並將結果賦給變量$ NUSER。

請幫忙。 :)

回答

3

如果$USER是包含您想要編輯的值的文件的名稱,那麼您嘗試的方式(減去一些多餘的反斜槓)將會起作用。由於該值是變量本身,你要管它的sed的標準輸入,像這樣:

NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//') 

$()不一樣反引號,但我喜歡這種語法,因爲它更容易窩。

注意需要提醒的是echo "$USER"導致問題如果$USER具有echo選項(如-n-e)的值。如果這是一個擔心,請使用bash特定的字符串查看Jonathan Leffer的解決方案。

+0

我明白了。我在BASH很新,但它很有趣。對不起,如果這是一個愚蠢的問題,非常感謝:) – Neekoy

2

在另一個answer中,Wintermute提出'無處不在'解決方案。

唯一擊溶液使用here-string代替—這就是<<<符號:

NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER") 

它具有避免在副殼的第二處理的優點。

+0

相信與否,我即將編輯它,儘管原因不同:即使'$ USER'具有某些東西的值, echo'解釋爲選項,如'-n'或'-e'。有+1。 – Wintermute

2
NUSER="${USER%%<!*}" 

使用shell變量操作速度快了很多,在這種情況下打開一個子shell和sed的作用(但不是你的要求的確切答覆要求使用SED)