我正在运行“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