繁体   English   中英

如何使用正则表达式模式格式化grep的输出以在字符串和字符之间进行匹配

[英]How to format the output of a grep with a regex pattern to match between a string and character

我一直在研究bash脚本,该脚本可以将字符串从logFile出现到outputFile中以监视其频率。 我想进一步过滤并使用该grep的结果,然后将字符串的一部分格式化为我的最终结果。

目前,我的grep如下获取我需要的logFile输出部分:

grep -n -A 1 "No entry for this particular code type" logFile.txt >> outputfile.txt

这将获得以该字符串开头的完整行,如下所示,代码类型的值在整个日志中不断变化:“此特定代码类型无条目,代码类型:001123。” 等等

我想解析从grep输出的上述结果行,只检索字符串“代码类型:”和字符“。”之间的值。 这会给我类似001123的值

我一直在网上寻找解决方案,但没有尝试过。 任何建议将不胜感激。

您可以使用sed通过另一个正则表达式提取数字:

cat outputfile.txt | sed 's/.*code type: \(.*\)\./\1/'

\\1引用表达式(第一个匹配组 )的\\(.*\\)部分的内容。

您可以使用bash内置的regEx支持来实现。 假设您将输出捕获在bash变量中

$ myString="No entry for this particular code type, code type: 001123."
$ [[ $myString =~ code\ type:(.*). ]] && subString="${BASH_REMATCH[1]}"
$
$ printf "%s\n" "$subString"
001123

(或)如果可以再次使用通过管道传递的grep进行regEx捕获,请执行

$ <first_grep_command> | grep -Po "code type: \K.*(?=.)"
001123

其中-P标志仅支持perl样式正则表达式匹配,而-o标志仅返回匹配的字符串。

这直接在我的外壳中工作:

echo "No entry for this particular code type, code type: 001123." |grep -Po '[0-9]*'

意思是说,这种方法可以在没有太多管道的情况下适用于您的情况:

grep -Po '[0-9]*' logfile.txt >>outputfile.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM