![返回与模式匹配的行的一部分](https://linux22.com/image/18969/%E8%BF%94%E5%9B%9E%E4%B8%8E%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E7%9A%84%E8%A1%8C%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86.png)
我有一个文件 (file_name),其中在一行的开头仅包含一次字符串“Result:”。我想打印该行中字符串“Result:”后面的所有字符,直到遇到“.”。特点。我应该使用哪个 shell 命令?
答案1
执行 Perl 正则表达式的 GNU grep 的现代版本将执行以下操作:
grep -P -o '^Result: \K[^.]*'
-o
告诉 grep 仅打印出该行中匹配的部分。正则表达式中的-P
with\K
是一个零宽度后向断言,导致 之前的内容\K
不属于匹配的一部分(零宽度)。
也可以看看:grep 可以只输出匹配的指定分组吗?
答案2
您可以使用sed
。像这样:
sed -e 's/Result:\(.*\)\..*$/\1/g' file_name
如果你想将结果保存在同一个文件中,你可以添加-i
到sed
参数
答案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 解决方案的背景。