正则表达式lookbehind忽略引号

正则表达式lookbehind忽略引号

我的文件中有以下字符串,我想提取后面的单词-s,即yesterday不带引号:

-t -w -g london -s 'yesterday' -e 'yesterday' -f 100000"

所需输出

yesterday

我尝试过的

  • 第一次尝试:

    grep -oP '(?<=\-s )\w*.*'
    

    这导致了

    'yesterday' -e 'yesterday' -f 100000
    

    但有时我也可能得到如下内容,即没有任何引号或也带有双引号

    -t -w -g london -s "yesterday" -e 'yesterday' -f 100000"
    -t -w -g london -s yesterday -e yesterday -f 100000"
    
  • 第二次尝试:

    grep -oP '(?<=\-s )\w*'
    

    这里我在输出中只得到单引号。

不确定如何处理上述情况。

答案1

一种相对简单的方法,通过lookbehind正则表达式来提取带有引号(单引号或双引号)的字符串,并稍后将其修剪掉(GNU grep)

grep -oP -- '-s\s*\K([^ ]+)' file | tr -d \'\"

答案2

grep给定示例输入的替代方案 (GNU) :

-t -w -g london -s 'yesterday' -e 'yesterday' -f 100000"
-t -w -g london -s "yesterday" -e 'yesterday' -f 100000"
-t -w -g london -s yesterday -e yesterday -f 100000"
$ grep -oP "(?<=-s \"|-s '|-s )[^'\" ]*" file
yesterday
yesterday
yesterday

相关内容