linux Grep命令跳过注解行

ih99xse1  于 2023-08-03  发布在  Linux
关注(0)|答案(3)|浏览(135)

我试着在文件中寻找一个模式。如果在该文件中注解了模式,我想跳过它。例如,该模式出现了2次,但输出应该是1次。基本上它应该跳过注解行你能建议一种方法吗

yc0p9oo0

yc0p9oo01#

一个简单的、常见的剥离shell注解的方法是:

egrep -v '^\s*#' <file>

字符串
这里,egrepgrep,输入是正则表达式模式。模式'^\s#'描述了以'#'字母开头的行,或以任意数量的空格后跟'#'开头的行。选项-v反转匹配(非匹配行通过)。然后,您可以进行进一步的模式搜索。

**警告:**代码后面出现的注解(例如echo 'foo' # bar)不会被剥离。使用此管道解决方案无法做到这一点。

yi0zb3m4

yi0zb3m42#

你可以在grep中使用选项-F。-F代表固定字符串。例如,我有一个文件,其中包含以下数据:

System out of memory
#System out of memory 
System out of memory #1  
1 #System out of memory

字符串
现在使用-F执行grep

grep -rF "#System out of memory" <path to grep>


产出

./file1:#System out of memory
./file1:1 #System out of memory


这是基本的意识形态。根据你的模式,它必须被修改

o2gm4chl

o2gm4chl3#

当使用grep -r时,必须使用grep -Ev [.\:]#
当使用grep recursive时,你必须记住输出将带有文件名和冒号:

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

字符串
因此,要过滤掉注解,| grep -v ^#根本不起作用,因为每行都以filename开头。使用grep -v '.*#'将删除任何带有注解的行,这将是太多了。
您必须执行grep -Ev [.\:]#,这将很好地重新存储:

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


与子目录和带有空格或任何内容的文件名一起工作得很好:)

相关问题