2015-10-28 37 views
0

有些東西我很難理解sed行爲。兩個看起來完全相同的sed命令,一個可以工作,另一個不可以。你能告訴我爲什麼嗎?

sed -n "/pattern/,$p" <input.inp> output.out 

提供了以下錯誤

sed: -e expression n°1, caractère 10: `,' inattendue 

(我的系統是法語)。

sed -n '/pattern/,$p' <input.inp> output.out 

做工精細

我personnally使用像

sed -n "/begin/,/end/p" <input.inp> output.out 

與兩個單或雙引號的命令,他們工作得很好。

在情況下,它是非常有用的,我的sed版:sed的(GNU SED)4.2.2

+0

是的!這顯然是bash $符號行爲的重複。感謝Etan追捕。 – user22277

回答

3

在雙引號,殼體,sed的不是,將評估$p。由於您可能沒有設置名爲p的變量,因此sed將只會看到/pattern/,。爲了防止這種情況發生,你需要躲避$的外殼,通過寫\$代替:

sed -n "/pattern/,\$p" <input.inp> output.out 

(你可以想像,使用單引號是對眼睛和大腦容易得多,除非你在表達式中需要shell變量。)

+1

@TomFenech:嘿,我只是爲此編輯。 :) –

相關問題