user@hostname [/root]:# grep -r matching /location/
/location/filename:#1st commented line matching
/location/filename:#2nd commented line matching
/location/filename:matching without comment
/location/filename:other line with matching #and comment
/location/filename:other line #matching after comment
/location/filename:#3rd commented line matching
/location/filename:#4th commented line matching
user@hostname [/root]:# grep -r matching /location/ | grep -Ev [.\:]#
/location/filename:matching without comment
/location/filename:other line with matching #and comment
/location/filename:other line #matching after comment
3条答案
按热度按时间yc0p9oo01#
一个简单的、常见的剥离shell注解的方法是:
字符串
这里,
egrep
是grep
,输入是正则表达式模式。模式'^\s#'描述了以'#'字母开头的行,或以任意数量的空格后跟'#'开头的行。选项-v
反转匹配(非匹配行通过)。然后,您可以进行进一步的模式搜索。**警告:**代码后面出现的注解(例如
echo 'foo' # bar
)不会被剥离。使用此管道解决方案无法做到这一点。yi0zb3m42#
你可以在grep中使用选项-F。-F代表固定字符串。例如,我有一个文件,其中包含以下数据:
字符串
现在使用-F执行grep
型
产出
型
这是基本的意识形态。根据你的模式,它必须被修改
o2gm4chl3#
当使用
grep -r
时,必须使用grep -Ev [.\:]#
。当使用grep recursive时,你必须记住输出将带有文件名和冒号:
字符串
因此,要过滤掉注解,
| grep -v ^#
根本不起作用,因为每行都以filename开头。使用grep -v '.*#'
将删除任何带有注解的行,这将是太多了。您必须执行
grep -Ev [.\:]#
,这将很好地重新存储:型
与子目录和带有空格或任何内容的文件名一起工作得很好:)