unix 使用正则表达式字符串提取单词

uyhoqukh  于 2022-11-04  发布在  Unix
关注(0)|答案(2)|浏览(152)

从这个post中,我可以通过使用或regex字符串m/(?<=object\.)\w*来识别模式object.*。但是,由于我不熟悉Linux,我不能正确地使用命令sedperl来提取所需的令牌。因此,我需要您的帮助。我最好的猜测是grep -E -n object file.txt | perl -nle 'm/(?<=object\.)\w*/; print $1'

0md85ypi

0md85ypi1#

您可以使用grepsed

grep -oP '(?<=object\.)\w+' file
sed -nE 's/.*object\.([[:alnum:]_]+).*/\1/p' file

请参阅online demo
grep -oP允许您使用PCRE正则表达式(带有-P选项)并提取所有匹配的文本(带有-o选项)。
sed命令更为复杂,它允许每行提取一次匹配(即一行中的最后一个匹配):首先,它使用-n抑制默认行输出,并将正则表达式风格设置为POSIX ERE(使用-E),然后匹配包含object. +一个或多个捕获到\1中的字母数字或下划线字符的行,并使用Group 1值替换整行,并且只返回该结果。

f4t66c6m

f4t66c6m2#

$1包含第一次捕获((...))所捕获的内容。但您没有任何捕获。
相反,您需要$&,它包含与模式匹配的文本。

grep -E -n object file.txt | perl -nle'm/(?<=object\.)\w*/; print $&'

您可以只在找到匹配项时打印,而不是无条件地打印,从而消除了对grep的需要。

perl -nle'print $? if /(?<=object\.)\w+/' file.txt

最后,我们不需要相对缓慢的环视。

perl -nle'print $1 if /object\.(\w+)/' file.txt

在某些系统上,grep也可以使用-o-P来完成这项工作。

grep -oP '(?<=object\.)\w+' file.txt

相关问题