我基本上正在使用正则表达式.在输出中,我想只看到与我的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)
| 归档时间: |
|
| 查看次数: |
32827 次 |
| 最近记录: |