解析$(shell git ls-files | grep -E ‘\.h$$|\.cpp$$|\.hpp$$|\\.c$$‘ | tr ‘\n‘ ‘ ‘)

事情是这样,最近在学习conan,发现一条命令,有点蒙,顺道温故一下shell命令

Makefile文件里的一条命令如下:

HEARD_SRCS = $(shell git ls-files | grep -E '\.h$$|\.cpp$$|\.hpp$$|\\.c$$' | tr '\n' ' ')

开始拆分:

1.git ls-files

git 命令,递归显示.git同级目录下的文件信息。

git ls-files [-z] [-t] [-v]
                (--[cached|deleted|others|ignored|stage|unmerged|killed|modified])*
                (-[c|d|o|i|s|u|k|m])*
                [--eol]
                [-x <pattern>|--exclude=<pattern>]
                [-X <file>|--exclude-from=<file>]
                [--exclude-per-directory=<file>]
                [--exclude-standard]
                [--error-unmatch] [--with-tree=<tree-ish>]
                [--full-name] [--recurse-submodules]
                [--abbrev] [--] [<file>…​]

2.grep -e -v -E

可用于表达grep的 or and not操作。

grep的or操作有4种表达方式:

  • grep 'pattern1\|pattern2' filename
  • grep -E 'pattern1|pattern2' filename
  • egrep 'pattern1|pattern2' filename
  • grep -e pattern1 -e pattern2 filename

grep的and操作可以2种表达方式:

  • grep命令本身不提供AND功能。但是,使用 -E 选项可以实现AND操作。grep -E 'pattern1.*pattern2' filename
  • 可以使用多个 grep 命令 ,由管道符分割,以此来实现 AND 语义。 grep -E 'pattern1' filename | grep -E 'pattern2'

grep的not:

grep -v 'pattern1' filename

3. tr 

删除文件中的控制字符以及进行字符转换操作.

4. '\.h'

\是shell的转义就是'.h'

5. $$

应该是正则表达式中的$,表示结尾匹配。其实写一个$就能满足。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值