我正在OSX上写一个bash脚本。有很多grep和sed都在运行,除了一个例外:我不知道如何删除多个哈希标签。
这将删除所有的哈希标签,没有问题:
sed 's/#[^ ]*//g'我希望这样可以删除特定的哈希标签:
sed "s/#(tag1|tag2)//g"但它不会移除任何东西。
我认为#符号可能是一个特殊的角色,所以我试着没有:
sed "s/(tag1|tag2)//g"这没有什么区别,tag1和tag2都没有被删除。
但如果我尝试:
sed "s/tag1//g"然后删除tag1,留下#。
如果我试着:
sed "s/#tag1//g"什么都没发生!它不移除tag1或标签1。
有人能指出我哪里出了问题吗?
编辑:这是代码:
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开始的每件事都正常工作。这只是我有问题的标签。我也尝试过在序列中的其他点执行哈希标记,但这并没有什么区别。
发布于 2019-03-20 16:36:56
尝试:
sed -E 's/#(tag1|tag2)//g'在苏德的帮助下:
-E, -r, --regexp-extended
use extended regular expressions in the script
(for portability use POSIX -E).发布于 2019-03-20 16:46:19
POSIX标准sed在regex中不支持|,您可以使用两个ses,如下所示:
sed -e 's/#tag1//g;s/#tag2//g;'或
sed -e 's/#tag1//g;' -e 's/#tag2//g;'顺便说一句,它还需要使用\(和\)来对事物进行分组。
(和)将匹配父母的字面意思。
https://stackoverflow.com/questions/55265794
复制相似问题