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

replace multiple strings in one line with sed

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

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

如何删除其他列表中的某些内容?

dellist="package24|package66"

我试过了

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

但这不起作用。

sed 正则表达式中,您必须转义 (|)

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

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

我添加了 \b 所以它只匹配整个单词。

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