我有以下 linux 命令:
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遇到的问题是:
- inputFile 应该在正则表达式之后,而不是之前
- 需要
-E
标志才能使{1,}
工作 - 最好在外面使用单引号,这样双引号就不需要转义了
- 需要使用
[^"]
字符类而不是。
关于regex - Linux 中的 grep 命令使用“在正则表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49412808/