Regex 正则表达式,用于在bash脚本中从文件中返回字符串的一部分
好吧,我被难住了 我有一个bash脚本。我要做的第一件事是运行一个输出到日志文件的命令。结果如下所示:Regex 正则表达式,用于在bash脚本中从文件中返回字符串的一部分,regex,bash,Regex,Bash,好吧,我被难住了 我有一个bash脚本。我要做的第一件事是运行一个输出到日志文件的命令。结果如下所示: LINE1: ProgOut: Starting my thing <parm1> in this <parm2> ... 2014-01-22 LINE2: 10:21:52.750 NOTIFICATION XYZ-000: My thing "<parm1>", inst "123456", sub 1 has started LINE1:Pro
LINE1: ProgOut: Starting my thing <parm1> in this <parm2> ... 2014-01-22
LINE2: 10:21:52.750 NOTIFICATION XYZ-000: My thing "<parm1>", inst "123456", sub 1 has started
LINE1:ProgOut:在这里开始我的工作。。。2014-01-22
第2行:10:21:52.750通知XYZ-000:“我的东西”,指示“123456”,子1已开始
和
是输入参数,因此可能会更改。所有其他文本(第1行和第2行除外,它们是为了可读性而存在的)都是标准输出
我需要通读并将值123456赋给一个变量
我尝试使用正则表达式:
INST_ID=$(tail -5 "$LOG_FILE" | grep -oP "^ *My thing *\ *"<parm1>", inst \"\K[^\"]+")
INST\u ID=$(tail-5“$LOG\u FILE”| grep-oP“^*我的东西*\*”,INST\“\K[^\“]+”)
但这显然不起作用,我正在努力寻找替代方案。我还以为fgrep/grep-f会更好,这样我就可以逐行阅读了
谢谢我想这个
grep
会有帮助的
grep -o "inst \"[0-9]*\"" | grep -o [0-9]*
如果日志文件中只有这两行,因此单词“inst”仅出现在“123456”之前,那么cnicutar的答案应该有效。你跑步时得到什么 var=`
cat|grep inst|sed's/*inst“\(.*\)”*/\1/'
`
echo$var您的预期输出是什么?我想获得inst的值(即本例中的123456),然后将其用于其他用途。那么为什么您的代码要搜索
我的东西
?这可能是错误的。你会怎么做?下面的任何答案都不起作用吗?Sakthi,帮助你,因为它没有返回任何东西。第一个grep返回inst“123456”,正如您所期望的那样。第二个不会回来。如果我把*取下来,我会在不同的行上打印1,2,3,4,5,6?实际上我在我的机器上测试过。第二个grep也返回了该值#inst-u-id=tail-n1测试| grep-o“inst\”[0-9]*\“| grep-o[0-9]*
#echo$inst-u-id 123456感谢我的测试。我注意到如果我做[0-9][0-9][0-9][0-9][0-9][0-9][0-9],我会得到回报。但是数字可以是任意长度-因此您使用了*。一定有什么我错过了,但别明白。