2017-08-08 119 views
-1

我试图grep一个文件中的模式。如果它在该文件中被注释,我想跳过模式发生。 例如,该模式有2次出现,但输出应该是1次出现。基本上,它应该跳过注释行 能否请您提出一个方法为这个grep命令跳过注释行

+1

有很多种类的评论 - '/ * * /'或''或'#'或'//'......也许你可以指定你的评论想过滤掉。 –

+0

我在.pl文件中执行这个grep。我正在使用#和= head .. = cut for commenting – Sanchu

回答

1

一种简单,常用的方式剥去外壳的意见是:

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

这里,egrepgrep用正则表达式模式作为输入。模式'^ \ s#'描述了以'#'开头的行,或者任何数量的空白后跟'#'的行。选项-v反转匹配(不匹配的线路通过)。然后,您可以管道进行进一步的模式搜索。

注意:代码后出现的注释(例如echo 'foo' # bar)不会被剥离。这种管道解决方案无法做到这一点。

0

您可以在grep中使用选项-F。 -F表示固定的字符串。比如我有一个具有以下数据的文件:

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

现在与-F

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

输出

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

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

+0

我试过了,但是如果只搜索系统内存不足,它将不会跳过注释行..对吧?系统内存不足 #系统内存不足 系统内存不足#1 1#系统内存不足# – Sanchu