grep 以前缀开头的字符串

grep 以前缀开头的字符串

我想显示整个目录中使用的图标列表而不重复,例如我有:

<span class="icon icon-test"></span> (in test1.html)
<span class="icon icon-wrench"></span> (in wrench.html)
<span class="icon icon-test"></span> (in test3.html)

想要的输出:

test
wrench

到目前为止,我尝试过这样的想法:

grep -onr 'icon-.* "$' .

答案1

grep -P

grep -Phro 'icon-\K[^" ]+' . | sort -u

没有grep -P

grep -hro 'icon-[^" ]\+' . | cut -d- -f2 | sort -u

解释:

  • -P使用 Perl 兼容正则表达式 (PCRE) 代替基本正则表达式 (BRE)
  • -h不打印文件名
  • -r对所有文件递归运行
  • -o仅输出匹配项而不是整行
  • [^" ]+匹配 1 个或多个不是双引号或空格的字符,您可以将其更改为例如,[a-z]+如果您知道名称都是 az 中的小写字符。注意:因为BRE您需要转义量词:\+
  • | cut -d- -f2icon-从 grep 输出中删除。 (有很多方法可以实现这一点,如果你想坚持使用grep,你可以使用grep -o '\w\+$')。
  • | sort -u对输出进行排序并删除重复项。

相关内容