我試圖只打印包含變量$ foo的行。我試過用雙引號和花括號來無濟於事。在sed中將shell變量傳遞給正則表達式的正確方法是什麼?如何將變量從bash傳遞到正則表達式
sed -n 's:\("${foo}".*$\):\1:p' file.txt
我試圖只打印包含變量$ foo的行。我試過用雙引號和花括號來無濟於事。在sed中將shell變量傳遞給正則表達式的正確方法是什麼?如何將變量從bash傳遞到正則表達式
sed -n 's:\("${foo}".*$\):\1:p' file.txt
sed
如果您實際上不需要修改匹配行,則會導致過度使用。只需使用grep
:
grep "$foo" file.txt
嘗試下面的sed命令來打印含有分配給變量foo
值的行。
sed -n "/$foo/p" file
對於正確的sed命令+1,對於使用錯誤的工具爲-1。你看,沒有人說''$ foo''變量不包含任何特殊字符。而且你知道如果''/''類似''$ foo''內部會發生什麼情況。 grep解決方案沒有這樣的問題。 –
@ Aleks-DanielJakimenko好點。 BUt op需要sed解決方案。所以我發佈了它。而且如果變量包含特殊字符,那麼他爲什麼選擇sed打印相應的行。 –
這就是爲什麼我沒有downvote :)但有時人們會要求錯誤的東西,給他們一個答案只會讓事情變得更糟。 –
使用單引號,你得到像
$-pattern='foo'
$-sed 's/('$pattern'.*$)/<\1>/g'
fo
fo
foo
<foo>
你確定你的問題是傳遞變量的結果呢?當你使用字面值時,你是否證實你有匹配? – merlin2011
單引號可防止變量替換。你需要做這樣的事情:'sed -n's:\('「$ {foo}」'。* $ \):\ 1:p'file.txt'。使用該行上的echo來查看(或多或少)發生了什麼。 – rici