如何 grep 所有以 '.txt' 结尾的字符串

如何 grep 所有以 '.txt' 结尾的字符串

我需要在文本文件中查找所有以“.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恰好出现的字符串仅有的在行尾。

相关内容