使用 grep 的正则表达式中的插入符号字符出现意外行为

使用 grep 的正则表达式中的插入符号字符出现意外行为

我正在运行“William Shotts”正则表达式示例中的 grep 命令。看来,插入符号没有发挥应有的作用。我有四个测试文件,其中包含所有 bin 条目的文本形式。我的目的是从我的 4 个文件中(所有文件名都以“dirlist”开头)找到以“zip”开头的关键字,因此运行了以下命令:

grep '^zip' dirlist*.txt

它应该返回诸如 zip、zipgrep 等关键字,但它根本不起作用。请帮忙!我做错了什么?

答案1

我的目的是找到以“zip”开头的关键字

插入符号^与行首匹配,并且不是一个单词的开头...因此,grep '^zip' dirlist*.txt仅有的zip如果位于一行的开头则匹配。

zip要匹配以行中任意位置开头的整个单词,可以使用-w选项 ... fromman grep

   -w, --word-regexp
          Select only those lines containing matches that form whole words.  The test is that
          the  matching substring must either be at the beginning of the line, or preceded by
          a non-word constituent character.  Similarly, it must be either at the end  of  the
          line  or followed by a non-word constituent character.  Word-constituent characters
          are letters, digits, and the underscore.

zip...并使用后跟零个或多个单词字符来构成您的 RegEx,\w*如下所示:

grep -w 'zip\w*' dirlist*.txt

...或者,类似地,使用单词边界,\b而不是-w像这样:

grep '\bzip\w*\b' dirlist*.txt

它应该返回诸如 zip、zipgrep 等关键字

回来o仅匹配 RegEx 的部分而不是包含匹配的整行,您可以使用grep的选项-o

   -o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each such part on
          a separate output line.

...像这样:

grep -ow 'zip\w*' dirlist*.txt

... 或者:

grep -o '\bzip\w*\b' dirlist*.txt

相关内容