从这个post中,我可以通过使用或regex字符串m/(?<=object\.)\w*来识别模式object.*。但是,由于我不熟悉Linux,我不能正确地使用命令sed或perl来提取所需的令牌。因此,我需要您的帮助。我最好的猜测是grep -E -n object file.txt | perl -nle 'm/(?<=object\.)\w*/; print $1'。
m/(?<=object\.)\w*
object.*
sed
perl
grep -E -n object file.txt | perl -nle 'm/(?<=object\.)\w*/; print $1'
0md85ypi1#
您可以使用grep或sed:
grep
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值替换整行,并且只返回该结果。
grep -oP
-P
-o
-n
-E
object.
\1
f4t66c6m2#
$1包含第一次捕获((...))所捕获的内容。但您没有任何捕获。相反,您需要$&,它包含与模式匹配的文本。
$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
2条答案
按热度按时间0md85ypi1#
您可以使用
grep
或sed
:请参阅online demo。
grep -oP
允许您使用PCRE正则表达式(带有-P
选项)并提取所有匹配的文本(带有-o
选项)。sed
命令更为复杂,它允许每行提取一次匹配(即一行中的最后一个匹配):首先,它使用-n
抑制默认行输出,并将正则表达式风格设置为POSIX ERE(使用-E
),然后匹配包含object.
+一个或多个捕获到\1
中的字母数字或下划线字符的行,并使用Group 1值替换整行,并且只返回该结果。f4t66c6m2#
$1
包含第一次捕获((...)
)所捕获的内容。但您没有任何捕获。相反,您需要
$&
,它包含与模式匹配的文本。您可以只在找到匹配项时打印,而不是无条件地打印,从而消除了对
grep
的需要。最后,我们不需要相对缓慢的环视。
在某些系统上,
grep
也可以使用-o
和-P
来完成这项工作。