2014-06-19 44 views
1

我試圖只打印包含變量$ foo的行。我試過用雙引號和花括號來無濟於事。在sed中將shell變量傳遞給正則表達式的正確方法是什麼?如何將變量從bash傳遞到正則表達式

sed -n 's:\("${foo}".*$\):\1:p' file.txt 
+0

你確定你的問題是傳遞變量的結果呢?當你使用字面值時,你是否證實你有匹配? – merlin2011

+2

單引號可防止變量替換。你需要做這樣的事情:'sed -n's:\('「$ {foo}」'。* $ \):\ 1:p'file.txt'。使用該行上的echo來查看(或多或少)發生了什麼。 – rici

回答

6

sed如果您實際上不需要修改匹配行,則會導致過度使用。只需使用grep

grep "$foo" file.txt 
1

嘗試下面的sed命令來打印含有分配給變量foo值的行。

sed -n "/$foo/p" file 
+1

對於正確的sed命令+1,對於使用錯誤的工具爲-1。你看,沒有人說''$ foo''變量不包含任何特殊字符。而且你知道如果''/''類似''​​$ foo''內部會發生什麼情況。 grep解決方案沒有這樣的問題。 –

+0

@ Aleks-DanielJakimenko好點。 BUt op需要sed解決方案。所以我發佈了它。而且如果變量包含特殊字符,那麼他爲什麼選擇sed打印相應的行。 –

+0

這就是爲什麼我沒有downvote :)但有時人們會要求錯誤的東西,給他們一個答案只會讓事情變得更糟。 –

0

使用單引號,你得到像

$-pattern='foo' 
$-sed 's/('$pattern'.*$)/<\1>/g' 
    fo 
    fo 
    foo 
    <foo> 
相關問題