如何搜索以$结尾的文件中的模式

时间:2014-10-29 14:28:35

标签: regex unix

我试图列出所有没有以下模式的文件

  • a)行应包含$Id
  • b)同一行也应以$
  • 结尾

例如:

#$Id abcd 2019 Exp $

# $Id abcd 03930 9:55 a.pm $

我能够满足第一个条件,即(a)但不符合第二个条件(b)

我使用以下命令:

find . -type f | xargs grep -H -c '$Id' | grep 0$ | cut -d':' -f1 

请帮我符合第二个条件,即(b)连同(a)。我应该如何修改grep命令以匹配行尾的$

4 个答案:

答案 0 :(得分:0)

我认为您想要转义特殊字符,因为$是行尾的符号。

$

变为:

\$

您还可以使用起始行字符:

^\$

答案 1 :(得分:0)

您正在使用-c来打破输出。相反,只需使用-H-exec

因此,如果您要打印“那些包含$ Id但在同一行末尾缺少'$'的文件”,那么这可以使:

find . -type f -exec grep -H '$Id' {} \; | grep -v "\$$" | cut -d: -f1

另外,注意“以$结尾”可以使用\$$\$来检查以逃避$本身,第二个$来匹配行尾。< / p>

测试

$ cat f1
#$Id abcd 2019 Exp $
# $Id abcd 03930 9:55 a.pm $
$ cat f2
#$Id abcd 2019 Exp a
# $Id abcd 03930 9:55 a.pm b
$ find . -type f -exec grep -H '$Id' {} \; | grep -v "\$$" | cut -d: -f1
./f2
./f2

答案 2 :(得分:0)

您可以将grep合并为一个:

grep -iE '\$id.*[^$]$'

答案 3 :(得分:0)

只需执行以下操作即可使这种方式更简单:

find . -type -f -exec grep '\$Id.*\$$' {} \;

如果你只想分开-H并且无论如何忽略左侧,你不需要:参数。

此外,对-exec使用find参数意味着您实际上不必将结果传递给其他任何内容。