我的文件中有以下字符串,我想提取后面的单词-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