我正在某些xml上运行grep命令,它似乎误解了我正在尝试使用的正则表达式。
这是命令
grep '<ernm:NewReleaseMessage.*?>' ./075679942012_ORIGNAL.xml
似乎正在发生的事情是正则表达式的?>
方面似乎没有导致匹配而不是匹配>
有什么想法吗?
答案 0 :(得分:2)
默认情况下,grep使用基本正则表达式并将?
视为文字问号。要将它视为正则表达式语法,您需要转义该字符。
grep '<ernm:NewReleaseMessage.*\?>' ./075679942012_ORIGNAL.xml
您可以使用-E
选项将模式解释为 extended regular expression 。
grep -E '<ernm:NewReleaseMessage.*?>' ./075679942012_ORIGNAL.xml
注意:以上内容将返回与您的模式匹配的整行,如果您只想要匹配的文本,请使用-o
选项,该选项仅打印匹配行的匹配部分。
grep -o '<ernm:NewReleaseMessage.*\?>' ./075679942012_ORIGNAL.xml
OR
grep -Eo '<ernm:NewReleaseMessage.*?>' ./075679942012_ORIGNAL.xml
答案 1 :(得分:2)
如果您希望将文本转到第一次出现的>
字符,请尝试以下命令,
grep -o '<ernm:NewReleaseMessage[^>]*>' file
如果您想要整行,请删除-o
参数。
示例:强>
$ cat aa1.txt
<ernm:NewReleaseMessage blah> foo bar>
$ grep -o '<ernm:NewReleaseMessage[^>]*>' aa1.txt
<ernm:NewReleaseMessage blah>
带有grep
的 -o
仅打印匹配的文字。
[^>]*
- 不是>
字符零或更多。所以它匹配>
字符的第一次出现。