基于this post,我尝试使用一个命令来查找一个非常复杂的字符串中的所有hashtag单词(以#开头的单词):
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
型
正确的命令应该是什么?
4条答案
按热度按时间8ljdwjyq1#
grep
通常更擅长提取子字符串。使用GNU-grep的-o
选项(只输出匹配的部分),您可以字符串
如果你真的需要
sed
,做类似的事情:将所有不以#
开头的单词替换为空格,然后删除第一个单词并压缩空格:型
xmq68pz92#
如果你想使用
sed
,你可以分离出所有以\n
开头的单词,然后找到它们:字符串
您需要在
sed
中使用-r
选项来使用扩展正则表达式。dgtucam13#
你可以这样做:
字符串
您将得到预期的输出:
型
说明:grep中的
-o
选项:仅打印行的匹配部分。
因此,上面的
grep
命令匹配一个hashtag,后跟非零数量的字母、数字和下划线。dvtswwa34#
再用一个命令(替换)和没有正则表达式扩展来踢一下jar:
字符串
提取以
#
开头的单词并删除所有其他字符串。提取依赖于
sed
的贪婪*
计算。产出:
型
测试环境:
型
除此之外,请考虑:
型