Bash sed - 在字符串中查找主题标签

时间:2016-01-01 14:32:37

标签: regex linux bash sed

基于this post,我试图找到一个命令来查找一个非常复杂的字符串中的所有主题标签字(以#开头的单词):

echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" | sed -e 's/^/ /g' -e 's/ [^#][^ ]*//g' -e 's/^ *//g'

不幸的是输出是:

#cerveau #Mopses"

而不是:

#cerveau #Einstein #Ordre #Mopses

正确的命令应该是什么?

3 个答案:

答案 0 :(得分:7)

getPage(function(url){...}, param2); 通常更适合提取子串。使用GNU-grep' grep选项(仅输出匹配的部分),您可以

-o

如果你确实需要echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" \ | grep -o '#[[:alpha:]]*' ,请执行类似的操作:将所有不以sed开头的单词替换为空格,然后删除第一个单词并压缩空格:< / p>

#

答案 1 :(得分:2)

如果您想使用sed,可以将所有以\n开头的单词分开,然后找到它们:

echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" \
| sed -re 's/(#\w+)/\n\1\n/g' \
| sed -rn '/^(#\w+)$/p'

您需要-r中的sed选项才能使用扩展正则表达式。

答案 2 :(得分:1)

你可以这样做:

3,2,1,0

您获得了预期的输出:

echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" | grep -o '#[a-zA-Z0-9_]\+'

说明:grep中的#cerveau #Einstein #Ordre #Mopses 选项:

  

仅打印行的匹配部分。

因此,上面的-o命令匹配一个hashtag,后跟一个非零数字的字母,数字和下划线。