使用sed删除多个主题标签

时间:2019-03-20 16:32:11

标签: bash macos sed

我正在OSX上编写bash脚本。有很多grep和sed可以正常工作,但有一个例外:我不知道如何删除多个主题标签。

这将删除所有主题标签,没问题:

sed 's/#[^ ]*//g'

我希望这样做可以删除特定的主题标签:

sed "s/#(tag1|tag2)//g"

但是它不会删除任何东西。

我认为#符号可能是一个特殊字符,因此我尝试了以下操作:

sed "s/(tag1|tag2)//g"

没有区别,tag1和tag2均未删除。

但是,如果我尝试:

sed "s/tag1//g"

然后删除标记1,留下#。

如果我再尝试:

sed "s/#tag1//g"

什么都没发生!它不会删除tag1或#tag1。

有人可以指出我要去哪里了吗?

编辑:这是代码:

results=($( \
echo "$ContentsOfHTMLFile" \
| sed -E "s/#(tag1|tag2|tag3)//g" \
| grep -iEo "<p.*>.*$VariableContainingSearchTerms\D.*</p>" \
| grep -iEo "<p.*>.*$VariableContainingSearchTerms.*</p>" \
| grep -Ev $VariableContainingSearchTermsToExclude \
| sed 's/<[^>]*>//g' \
| sed 's/http[^ ]*//g' \
| sed 's/^[[:space:]]*//' \
| sed 's/[[:space:]]*$//' \
))

所以我想做的是:

  1. 删除某些主题标签。
  2. 搜索包含某些术语的<p></p>块。
  3. 仅保留包含某些其他术语的块。
  4. 剥离所有<>块。
  5. 剥离所有URL。
  6. 剥离所有前导空白。
  7. 剥离所有尾随空白。

2-7的所有内容均应正常工作。只是我遇到问题的主题标签。我还尝试过在序列中其他位置执行主题标签,但这没什么区别。

2 个答案:

答案 0 :(得分:1)

尝试:

sed -E 's/#(tag1|tag2)//g'

在sed的帮助下:

  -E, -r, --regexp-extended
                 use extended regular expressions in the script
                 (for portability use POSIX -E).

答案 1 :(得分:1)

POSIX标准sed在正则表达式中不支持|,您可以改用两个s es,如下所示:

sed -e 's/#tag1//g;s/#tag2//g;'

sed -e 's/#tag1//g;' -e 's/#tag2//g;'

顺便说一句,它还需要使用\(\)对事物进行分组。
()将在字面上匹配括号。