我试图使用 sed 从主机名列表中删除任何子域前缀,但当我使用正则表达式时,它不会替换任何内容。这是不起作用的简化示例:
echo "subdomainxyz.example.com" | sed 's/[a-z]+\.example\.com//'
当我在那里硬编码特定的子域时,它工作得很好:
echo "subdomainxyz.example.com" | sed 's/subdomainxyz\.example.com/example.com/'
答案1
在提交问题之前我就找到了答案,但由于我已经输入了它,所以我想我会发布它,以防它对任何人有帮助。
需要的关键是添加-r
标志(可能-E
在某些版本上)来告诉sed
支持扩展正则表达式,这是使用字符类/范围语法和加号运算符所需的[a-z]+
。这就像你必须做的那样grep
(出于某种原因,我认为sed
默认为扩展正则表达式,但这是不正确的)。
这是一个工作示例:
echo "subdomainxyz.example.com" | sed -r 's/[a-z]+\.example\.com/example.com/'
编辑(信用steeldriver):
只需转义加号即可,不需要 -r 。例子:
echo "subdomainxyz.example.com" | sed 's/[a-z]\+\.example\.com/example.com/'