我有一个包名列表,想删除一些包含sed
echo "package1 package2 package24 package44 package66 package12345" > benoetigte_pakete.list
如何删除其他列表中的一些?
dellist="package24|package66"
我试过
cat benoetigte_pakete.list | sed "s/(package24|package66)//"
但这不起作用。
答案 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
选项来使用扩展正则表达式。