[英]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.