2016-02-05 33 views
0

我剛剛遇到最令人困惑的(對我來說)現象。超級用戶運行時sed工作方式不同嗎?

我有一個sed一個襯墊

sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 

這不正是我想要的東西,並取代 「* DefaultPaperDimension:字母 」 與 「* DefaultPaperDimension:A4」

但是當我運行

sudo sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 

沒有匹配或替換。 「* DefaultPaperDimension:字母 」仍然「* DefaultPaperDimension:Letter」

爲什麼是這個?? 8-/

+1

背部引用不應該是'\ 1'而不是'$ 1'? – nu11p01n73R

+0

一些老版本的'sed'支持'$ n'風格的反向引用,但是用'\ 1'來代替它,看看它是否有效。我無法複製,但我懷疑是參數擴展問題。 – miken32

+0

你使用哪個sed版本和操作系統/發行版? – Cyrus

回答

0

謝謝您的意見。在搜索sed的版本時,我發現我創建了一個別名sed='perl -pe',它是一個不是全局用戶別名的用戶別名,不會影響sudo。

這樣:

sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 

實際上是

perl -pe 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 

sudo sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 

是實際的SED,因此它似乎是。

再次感謝。

相關問題