我正在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:]]*$//' \
))
所以我想做的是:
<p></p>
块。<>
块。2-7的所有内容均应正常工作。只是我遇到问题的主题标签。我还尝试过在序列中其他位置执行主题标签,但这没什么区别。
答案 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;'
顺便说一句,它还需要使用\(
和\)
对事物进行分组。
(
和)
将在字面上匹配括号。