Sed模式多重匹配

时间:2014-10-23 06:42:07

标签: regex shell sed

我需要做一份工作:

echo "apa.tif bib.jpg"|sed 's/(\.tif)|(\.jpg)//g'

期待结果:

apa bib

但我得到了结果:

apa.tif bib.jpg

请有人帮我解决这个问题。感谢。

5 个答案:

答案 0 :(得分:3)

更改您的sed命令,如下所示,

$ echo "apa.tif bib.jpg"|sed 's/\.tif\|\.jpg//g'
apa bib

OR

$ echo "apa.tif bib.jpg"|sed 's/\.\(tif\|jpg\)//g'
apa bib

在基本sed中,您需要转义|符号才能使其执行正则表达式或操作。此外,您还需要转义()符号才能进行捕获。

您的正则表达式将被修改为,

$ echo "apa.tif bib.jpg"|sed 's/\(\.tif\)\|\(\.jpg\)//g'
apa bib

答案 1 :(得分:0)

echo "apa.tif bib.jpg" | sed -r 's/\.[^ \s\t]+//g'

答案 2 :(得分:0)

你可以尝试执行这样的多个命令:

sed -e 's/\.tif//g' -e 's/\.jpg//g'

答案 3 :(得分:0)

echo "apa.tif bib.jpg bad.tiffany.png" | sed 's/\.\(tif|jpg\)\( |$\)/\1/g'

如果,要排除非扩展模式匹配

答案 4 :(得分:0)

您也可以使用awk

echo "apa.tif bib.jpg" | awk '{gsub(/\.tif|\.jpg/,"")}1'
apa bib