2016-02-05 47 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,因此它似乎是。

再次感谢。

相关问题