基于这篇文章,我试图找到一个命令来查找一个非常复杂的字符串中的所有主题标签字(以#开头的单词):
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
什么应该是正确的命令?
grep
通常更擅长提取子串.使用GNU-grep的-o
选项(只输出匹配的部分),你可以
echo "Le #cerveau d’#Einstein n’est « #Ordre des #Mopses\" » pas" \ | grep -o '#[[:alpha:]]*'
如果你真的需要sed
,做类似的事情:用#
空格替换所有不以a开头的单词,然后删除第一个单词并压缩空格:
sed -e 's/[^[:alpha:]#][[:alpha:]]*/ /g' \ -e 's/^[^#]*//' \ -e 's/ */ /g'