Sed在超级用户运行时的工作方式不同?

Sed在超级用户运行时的工作方式不同?,sed,sudo,Sed,Sudo,我刚刚遇到了(对我来说)最令人困惑的现象 我有一个单程航班 sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-* 这正是我想要的,并替换了“*DefaultPaperDimension:Letter” 带“*DefaultPaperDimension:A4” 但是当我跑的时候 sudo sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/H

我刚刚遇到了(对我来说)最令人困惑的现象

我有一个单程航班

sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-*
这正是我想要的,并替换了“*DefaultPaperDimension:Letter” 带“*DefaultPaperDimension:A4”

但是当我跑的时候

sudo sed 's/^(\*Default.*:) Letter/$1 A4/g' /usr/share/ppd/hplip/HP/HP-*
没有匹配或替换的内容。“*DefaultPaperDimension:字母 “保留”*DefaultPaperDimension:字母”


这是为什么??8-/

谢谢您的评论。在搜索sed的版本时,我发现我创建了一个别名
sed='perl-pe'
,作为用户别名而不是全局别名不会影响sudo

因此:

实际上是

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

是实际的sed,因此它看起来是什么


再次感谢。

反向引用不应该是
\1
而不是
$1
?一些旧版本的
sed
支持
$n
样式的反向引用,但可以使用
\1
进行尝试,看看是否有效。我不能复制,但我怀疑是参数扩展问题造成的;Sed=GNU Sed 4.2.2
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-*