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