2015-05-28 104 views
2

我有一些變量:如何在shell中將變量解析爲sed命令?

$begin=10 
$end=20 

如何將它們傳遞給sed命令。

sed -n '$begin,$endp' filename | grep word 
sed -n '10,20p' filename | grep word 
+0

你可以把grep邏輯放在sed中:try'sed -n「$ begin,$ end {/ word/p}」file' – Kent

+0

[sed腳本中的shell變量](http:// stackoverflow。 COM /問題/ 7006910 /殼變量 - 在-SID腳本) – NeronLeVelu

回答

2

這不起作用的原因是shell代碼中的單引號會阻止變量擴展。好的方法是使用AWK:

awk -v begin="$begin" -v end="$end" 'NR == begin, NR == end' filename 

這是可能用,如果你使用雙引號(其中shell變量被擴展)的sed:

sed -n "$begin,$end p" filename 

然而,這是受代碼因爲sed無法通過這種方式區分代碼和數據(與上面的awk代碼不同)。如果用戶設置,例如end="20 e rm -Rf /;",可能會發生不愉快的事情。