返回与模式匹配的行的一部分

返回与模式匹配的行的一部分

我有一个文件 (file_name),其中在一行的开头仅包含一次字符串“Result:”。我想打印该行中字符串“Result:”后面的所有字符,直到遇到“.”。特点。我应该使用哪个 shell 命令?

答案1

执行 Perl 正则表达式的 GNU grep 的现代版本将执行以下操作:

grep -P -o '^Result: \K[^.]*'

-o告诉 grep 仅打印出该行中匹配的部分。正则表达式中的-Pwith\K是一个零宽度后向断言,导致 之前的内容\K不属于匹配的一部分(零宽度)。

也可以看看:grep 可以只输出匹配的指定分组吗?

答案2

您可以使用sed。像这样:

sed -e 's/Result:\(.*\)\..*$/\1/g' file_name

如果你想将结果保存在同一个文件中,你可以添加-ised参数

答案3

<file_name sed -n 's/^Result: \([^.]*\)\..*/\1/p'
<file_name awk '/^Result:.*\./ {sub(/^Result: /,""); sub(/\..*/, ""); print}'
<file_name grep '^Result: .*\.' | sed 's/^Result: //' | sed 's/\..*//'

.如果不需要a 的存在,则更改为

<file_name sed -n -e 's/\..*//' -e 's/^Result: //p'
<file_name awk '/^Result: / {sub(/^Result: /,""); print}'
<file_name grep '^Result: ' | sed 's/^Result: //'

这个答案了解 sed 解决方案的背景。

相关内容