Text-Processing

正則表達式後視忽略引號

  • November 10, 2021

我的文件中有以下字元串,我想在之後提取單詞-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*'

在這裡,我在輸出中只有單引號。

不確定如何處理上述情況。

一種相對簡單的方法是通過後向正則表達式提取帶有引號(單引號或雙引號)的字元串並稍後將其修剪掉(GNU grep)

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

給定範例輸入的替代 (GNU) grep

-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

引用自:https://unix.stackexchange.com/questions/676888