匹配其中一个模式后打印下一个单词。下一个单词可以是空格分隔或等号

时间:2017-11-02 11:51:48

标签: bash awk sed scripting grep

在匹配其中一个模式(即“-l”或“--log-file =”)后打印下一个单词。下一个单词可以是空格分隔或等号“=”

cat server.log
server_options='-l /tmp/server_log --log-level=1'

cat server1.log
server_options='--log-file=/tmp/server1_log --log-level=1'

第一个例子的预期输出[仅在查找模式之后的下一个单词而不是直到行尾]: -

/tmp/server_log

第二个例子的预期输出[只有找到模式后的下一个单词而不是直到行尾]: -

/tmp/server1_log

如果指定了“-l”,则打印以下内容

$ grep -Po '^[^#;].*(-l|--log-file) \K.*(?=.)' server.log
/tmp/server_log

但是当指定“--log-file =”时它不起作用

 $ grep -Po '^[^#;].*(-l|--log-file) \K.*(?=.)' server1.log

注意: - 可以有多个选项,例如“-a”“ - f”以及-l或--log-file,可以在引号内的任何位置

1 个答案:

答案 0 :(得分:1)

您可以使用:

grep -Po "^[^#;].*(-l |--log-file=)\K[^\s']+" server.log

请注意,-l后跟空格,-log-file后跟=

grep需要gnu grep。