我試圖刪除BASH中某個變量的一些內容。我特別想刪除以下部分從變量$ USER部分:用Sed替換變量的內容
<username><![CDATA[
我的代碼如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我用反斜槓轉義特殊字符(我不知道是否正確),並想從$ USER中刪除提及的部分,並將結果賦給變量$ NUSER。
請幫忙。 :)
我試圖刪除BASH中某個變量的一些內容。我特別想刪除以下部分從變量$ USER部分:用Sed替換變量的內容
<username><![CDATA[
我的代碼如下所示:
NUSER=`sed -e "s/\<username\>\<\!\[CDATA\[//" $USER`
我用反斜槓轉義特殊字符(我不知道是否正確),並想從$ USER中刪除提及的部分,並將結果賦給變量$ NUSER。
請幫忙。 :)
如果$USER
是包含您想要編輯的值的文件的名稱,那麼您嘗試的方式(減去一些多餘的反斜槓)將會起作用。由於該值是變量本身,你要管它的sed的標準輸入,像這樣:
NUSER=$(echo "$USER" | sed -e 's/^<username><!\[CDATA\[//')
$()
不一樣反引號,但我喜歡這種語法,因爲它更容易窩。
注意需要提醒的是echo "$USER"
導致問題如果$USER
具有echo
選項(如-n
或-e
)的值。如果這是一個擔心,請使用bash特定的字符串查看Jonathan Leffer的解決方案。
在另一個answer中,Wintermute提出'無處不在'解決方案。
唯一擊溶液使用here-string代替—這就是<<<
符號:
NUSER=$(sed -e 's/^<username><!\[CDATA\[//' <<< "$USER")
它具有避免在副殼的第二處理的優點。
相信與否,我即將編輯它,儘管原因不同:即使'$ USER'具有某些東西的值, echo'解釋爲選項,如'-n'或'-e'。有+1。 – Wintermute
NUSER="${USER%%<!*}"
使用shell變量操作速度快了很多,在這種情況下打開一個子shell和sed的作用(但不是你的要求的確切答覆要求使用SED)
我明白了。我在BASH很新,但它很有趣。對不起,如果這是一個愚蠢的問題,非常感謝:) – Neekoy