正規表現を振り返ると、引用符は無視されます。

正規表現を振り返ると、引用符は無視されます。

私のファイルに次の文字列があり、次の単語を抽出したいと思います。-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"
    
  • 2回目の試み:

    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

関連情報