[英]grep command in linux using " in regex
我有以下linux cmd:
grep -o file.txt "\"uri\":\".{1,}\""
我的文字如下:
"some characters here","uri":"some_URI*Here.^%$#!", "again a set of irrelevant characters"
当然我想要的输出是:
"uri":"some_URI*Here.^%$#!"
为什么我没有正确的输出? 因为我的文字中有“ grep所要求的”? 如何解决?
您可以使用以下正则表达式:
grep -oE '"uri":".[^"]+"' inputFile
原始海报提供的正则表达式几乎是正确的,但存在一些缺陷,以下是他/她的版本和更正的正则表达式:
grep -o inputFile "\"uri\":".{1,}\"" # wrong
grep -oE '"uri":"[^"]{1,}"' inputFile # correct
首次使用grep的问题是:
-E
标志才能使{1,}
工作 [^"]
字符类而不是.
或
grep -oE "\"uri\":\"[^\"]{1,}\"" file.txt
要么
grep -o "\"uri\":\"[^\"]\\{1,\\}\"" file.txt
会省略尾随无关字符。
说明:
grep
命令在模式之前列出了file.txt
,但是grep
首先需要模式,然后是文件。 .
,则需要[^\\"]
来匹配引号之间的字符。这是因为.
会匹配"
本身”,因此.{1,}
通过中间的双引号进行匹配(“贪婪匹配”)。 这两个选项是:
-E
, grep
使用扩展的正则表达式,其中{}
是自动范围运算符。 -E
,则需要使用反斜杠将{}
标记为范围运算符,而不是文字字符。 \\{1,\\}
是正则表达式语法。 由于您使用的是双引号的shell字符串,因此需要在\\\\{1,\\\\}
转义反斜杠。 要测试shell引用,一种简单的方法是使用echo
。 例如,在bash中:
$ echo grep -o "\"uri\":\"[^\"]\\{1,\\}\"" file.txt
grep -o "uri":"[^"]\{1,\}" file.txt
例如,这表明模式中的\\\\
已折叠为单个\\
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.