$ grep 'tableName="' db.changelog.xml
<createTable tableName="MY_TABLE" schemaName="public">
$ grep 'tableName="[A-Z_]+"' db.changelog.xml
第二个grep不会返回任何内容。那是为什么?
这是默认配置的LANG。
$ echo $LANG
en_US.UTF-8
$ grep --version
grep (GNU grep) 2.24
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
答案 0 :(得分:5)
在基本正则表达式(BRE)模式下,+
被解释为文字字符。
您有几种选择:
grep -E
启用扩展正则表达式支持\{1,\}
表示一个或多个(符合POSIX标准,适用于任何grep)\+
,GNU grep理解为在BRE模式下一个或多个 答案 1 :(得分:1)
你需要做
grep 'tableName="[A-Z_]\+"' db.changelog.xml
即。在\
之前添加+
。如果您发现这种反直觉,则可以使用扩展正则表达式或perl样式的正则表达式,分别带有标志-E
和-P
,例如
grep -P 'tableName="[A-Z_]+"' db.changelog.xml