我想匹配那些词语:
{'ID': 'X.id: 4243.4, Y.id 534534', 'text': 'text - text'}
{'ID': 'X.id: 4247.4, Y.id 534534', 'text': 'text - text'}
{'ID': 'X.id: 42233.4, Y.id 534534', 'text': 'text - text'}
我使用此regular expression
来匹配它们:
{'ID': 'X.id: [0-9]+.[0-9], Y.id [0-9]+', 'text': 'text - text'}
我在https://regexr.com/上对其进行了测试,但确实有效。
但是我尝试使用此命令将其与grep一起使用:
cat raport.log | grep "{'ID': 'X.id: [0-9]+.[0-9], Y.id [0-9]+', 'text': 'text - text'}"
我在哪里犯错误?
答案 0 :(得分:1)
您可以通过添加-E
选项来使用ERE POSIX模式,也可以使用+
将*
量化的子模式更改为其等效项(例如[0-9]+
=> { {1}})(或在GNU [0-9][0-9]*
中转义+
。)
grep
请注意,您需要转义点以匹配文字s="{'ID': 'X.id: 4243.4, Y.id 534534', 'text': 'text - text'}"
echo "$s" | grep -E "{'ID': 'X\.id: [0-9]+\.[0-9], Y\.id [0-9]+', 'text': 'text - text'}"
echo "$s" | grep "{'ID': 'X\.id: [0-9][0-9]*\.[0-9], Y\.id [0-9][0-9]*', 'text': 'text - text'}"
字符。