我有这样的文本文件
"an arbitrary string" = "this is the text one"
"other arbitrary string" = "second text"
"a third arbitrary string" = "the text number three"
我想只获得此
an arbitrary string
other arbitrary string
a third arbitrary string
即,第一个引号内的文字,或第一个"
和" =
之间的文字。我用过这个正则表达式
(?!").*(?=(" =))
当我在RegExr和online tool中尝试使用时,这是有效的。但是在我的OSX终端中,它不起作用,输出为空
grep -o '(?!").*(?=(" =))' input.txt
这里有什么问题?我是否必须逃避一些角色?我尝试每个人,没有任何改变。
非常感谢你,请原谅我对这个话题缺乏了解。
答案 0 :(得分:2)
Lookaheads和lookbehinds是PCRE功能,因此您必须使用参数-P
:
grep -Po '(?!").*(?=(" =))' input.txt
答案 1 :(得分:1)
这应该做:
awk -F\" '{print $2}' file
它使用"
作为分隔符,然后打印第二个字段。
答案 2 :(得分:1)
steffen`s answer是对的,你必须使用-P
标志。但是你的正则表达式也存在问题。
想象一下这个输入:
"an arbitrary string" = " =this is the text one"
你的正则表达式会大大失败。 要解决这个问题,你必须使用这样的东西:
grep -Po '^"\K.*?(?=(" =))'
^
以防止其他不从行开始的匹配。\K
更容易阅读。 (它还允许您匹配任意长度的字符串).*?
让它变得非贪婪。