我需要在文本文件中查找所有以“.txt”结尾的字符串。我试过:
grep 'txt$' myFile
但它给出整行,而不仅仅是以“.txt”结尾的字符串
答案1
如果你想列出仅有的匹配的“字符串”,您应该使用-o
以下选项grep
:
grep -o '\w*\.txt\b' myFile
或者
grep -Eo '\w+\.txt\b' myFile
手册页对此选项的解释如下:
-o, --only-matching
仅打印匹配行中匹配的(非空)部分,每个部分位于单独的输出行上。
但是,您需要定义对“字符串”的理解。我假设“字符串”类似于手册页中描述的“单词”:
符号 \< 和 \> 分别匹配单词开头和结尾的空字符串。符号 \b 匹配单词边缘的空字符串,而 \B 匹配不在单词边缘的空字符串。符号 \w 是 [_[:alnum:]] 的同义词,而 \W 是 [^_[:alnum:]] 的同义词。
在上面的例子中,两个字母序列的含义是:
顺序。 | 解释 |
---|---|
\w |
任何字母数字字符 |
\w* |
任意数量(0 个或更多)的字母数字字符 |
\w+ |
任意数量(1 个或多个)的字母数字字符(扩展正则表达式) |
\. |
句点 ( . ) 字符本身(. 具有特殊含义,应进行转义) |
\b |
匹配单词的结尾(字符串后不再有字母数字字符txt ) |
注意:$
你在问题中使用的字符表示“行尾”,它将导致匹配txt
恰好出现的字符串仅有的在行尾。