我有一个文件包含(每行一个)。我想从一些模式开始在引号之间提取单词。 (在我的例子中是C _)
"PATTERNabcde" sdfds sdfds
"sdfsdfsdf" sdfdsf sdfdsf
" PATTERNabc" dfdsdfd
我要提取:PATTERNabcde
PATTERNabc
修改
我想在不以$PATTERN
开头的引号之间提取单词。
答案 0 :(得分:2)
sed -rn 's/.*?".*?(PATTERN[^"]*)".*/\1/p'
-r
- 扩展正则表达式-n
- 已禁用自动打印.*?
- 零个或多个字符,非贪婪(
- 开放捕获组[^"]
- 除"
)
- 关闭捕获组\1
- 第一个匹配组p
- 打印我们只需用第一组替换每一行。如果有更换,我们打印。
答案 1 :(得分:2)
答案 2 :(得分:2)
您可以使用awk:
awk -F\" '$2~/^[[:space:]]*PATTERN/{print $2}' file
如果引号中只包含一个单词,或者可能以pattern开头的单词始终是第一个单词,则此方法有效;否则,你必须使用for循环:
awk -F\" '{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}'