在Ubuntu上的grep中,如何只显示与正则表达式匹配的字符串?

AMM*_*AMM 13 ubuntu grep

我基本上正在使用正则表达式.在输出中,我想只看到与我的reg exp匹配的字符串.

在一堆XML文件中(大多数它们是一行中包含大量数据的单行文件),我想得到所有以MAIL_开头的单词.

另外,我希望shell上的grep命令只给出匹配的单词,而不是整行(在这种情况下是整个文件).

我该怎么做呢?

我试过了

grep -Gril MAIL_* .
grep -Grio MAIL_* .
grep -Gro MAIL_* .
Run Code Online (Sandbox Code Playgroud)

tho*_*hor 17

首先,使用随Ubuntu安装的GNU grep,-G标志(使用基本regexp)是默认值,因此您可以省略它,但更好的是,使用带-E的扩展regexp.

-r标志表示在目录文件中进行递归搜索,这就是您所需要的.

并且,您使用-o标志打印一行的匹配部分是正确的.另外,要省略文件名,您需要-h标志.

你犯的唯一错误就是正则表达式本身.你错过了*之前的字符规范.您的命令应如下所示:

grep -Ehro 'MAIL_[^[:space:]]*' .
Run Code Online (Sandbox Code Playgroud)

示例输出(不递归):

$ echo "Some garbage MAIL_OPTION comes MAIL_VALUE here" | grep -Eho 'MAIL_[^[:space:]]*'
MAIL_OPTION
MAIL_VALUE
Run Code Online (Sandbox Code Playgroud)


ban*_*anx 6

请尝试以下命令

grep -Eo 'MAIL_[[:alnum:]_]*'
Run Code Online (Sandbox Code Playgroud)