用sed替换一行中的多个字符串

时间:2015-04-19 10:32:36

标签: bash sed

我有一个包名列表,想删除一些包含sed

的包名
echo "package1 package2 package24 package44 package66 package12345" > benoetigte_pakete.list

如何删除其他列表中的一些?

dellist="package24|package66"

我试过

cat benoetigte_pakete.list | sed "s/(package24|package66)//"

但这不起作用。

1 个答案:

答案 0 :(得分:3)

sed regexps中,您必须转义(|)

您还需要使用g修饰符,以便替换该行上的所有匹配项,而不仅仅是第一次匹配项。

dellist="package24|package66"
# escape the pipes
dellist=${dellist//|/\\|}
sed "s/\b\($dellist\)\b//g" benoietigte_packete.list

我添加了\b,因此它只匹配整个单词。

根据您拥有的sed版本,您还可以使用-E-r选项来使用扩展正则表达式。