正则表达式,用于在bash脚本中从文件中返回字符串的一部分

时间:2014-01-22 11:23:21

标签: 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

<parm1> and <parm2>是输入参数,因此可能会发生变化。所有其他文本(LINE1,LINE2除外,它们都是可读性)都是标准输出。

我需要通读并将值123456分配给变量。

我尝试过使用正则表达式:

INST_ID=$(tail -5 "$LOG_FILE" | grep -oP "^ *My thing *\ *"<parm1>", inst \"\K[^\"]+")

但它显然不起作用,我正在努力寻找替代方案。我还以为fgrep / grep -f会更好,所以我可以逐行阅读?

由于

2 个答案:

答案 0 :(得分:0)

认为这grep会有所帮助。

grep -o "inst \"[0-9]*\"" | grep -o [0-9]*

答案 1 :(得分:0)

如果日志文件中只有这两行,那么单词“inst”只出现在“123456”之前,那么cnicutar的答案应该有效。你运行什么

VAR =`cat <log_file_path> | grep inst | sed 's/.*inst "\(.*\)".*/\1/'`

echo $ var