我一直在研究一个bash脚本,它将一个字符串的出现从logFile转移到outputFile来监视它的频率。我想进一步过滤这个并使用该grep的结果然后格式化字符串的一部分作为我的最终结果。
目前我的grep如下所示,以获取我需要的logFile输出部分:
grep -n -A 1 "No entry for this particular code type" logFile.txt >> outputfile.txt
这将获得以该字符串开头的整行,并且看起来如下所示,代码类型的值不断变化: "此特定代码类型没有条目,代码类型:001123。"等
我想解析从grep输出的结果行,并且只检索字符串"代码类型:"之间的值。和角色"。"。 这将给我像001123
这样的值我一直在寻找一个解决方案,我尝试过的任何事情都没有解决。任何建议都将不胜感激。
答案 0 :(得分:1)
您可以使用sed
使用其他正则表达式拉出数字:
cat outputfile.txt | sed 's/.*code type: \(.*\)\./\1/'
\1
引用表达式\(.*\)
部分的内容(第一个match group)。
答案 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
仅返回匹配字符串。
答案 2 :(得分:0)
这个直接在我的shell中工作:
echo "No entry for this particular code type, code type: 001123." |grep -Po '[0-9]*'
意味着这个可以在没有太多管道的情况下工作:
grep -Po '[0-9]*' logfile.txt >>outputfile.txt