我试图列出所有没有以下模式的文件
$Id
和$
例如:
#$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
命令以匹配行尾的$
。
答案 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
参数意味着您实际上不必将结果传递给其他任何内容。