使用shell脚本在另一个文件中搜索文件的确切内容
我有一个包含许可证标题的文件。例如:使用shell脚本在另一个文件中搜索文件的确切内容,shell,grep,comparison,Shell,Grep,Comparison,我有一个包含许可证标题的文件。例如: /* * first line * second line */ 我只想在我的源文件的前4行中搜索确切的内容。 我试着用 grep-x-Ff“$license\u文件”$c\u文件” 但是不幸的是,GRIP搜索每一行而不是整个内容,因此它可以找到文件中间的行“/*”。 如何搜索整个内容? 谢谢大家! 您可能会发现很难创建多行模式。如上所述,您可能需要使用pcregrep: pcregrep-M-f“$license\u file”“$c\u fil
/*
* first line
* second line
*/
我只想在我的源文件的前4行中搜索确切的内容。
我试着用
grep-x-Ff“$license\u文件”$c\u文件”
<>但是不幸的是,GRIP搜索每一行而不是整个内容,因此它可以找到文件中间的行“/*”。
如何搜索整个内容?
谢谢大家! 您可能会发现很难创建多行模式。如上所述,您可能需要使用
pcregrep
:
pcregrep-M-f“$license\u file”“$c\u file”
但是,这有一些问题,因为它既不检查位置(在您的情况下为文件开始),也不检查模式是否适用于多行形式。首先,$license\u文件
中的内容应该如下
line 1\nline2\nline 3\nline 4\n
因此,如果您可以将$license\u file
的内容编辑为所需的格式,则问题可以按如下方式处理
pcregrep-HMf“$license_file”--行偏移量“$c_file”| grep-o”^$c_file:1:“| sed's/…$/”
--line offset
选项将报告匹配的行号,因此我们将grep行号1并去除行号以报告匹配的文件名。(因为我们知道行号=1,内容是$license\u file
中的内容,所以我想您应该报告匹配的文件名。)
如果您不能编辑$license\u文件
,则可以将其替换为sed
:
pcregrep-HMf不清楚,请在您的问题中提及预期输出,然后让我们知道。不幸的是,pcregrep在我的环境中不起作用。我收到错误消息“加载共享库时出错:libpcre.so.1”请尝试安装pcre
、libpcre
或libpcre3
。(我想它应该是libpcre3
,但是你可以看到它在你的发行版中是否有不同的名称。谢谢。现在我可以使用pcregrep了。我已经编辑了许可证文件,但它仍然在给定的c文件中找不到模式。当许可证文件包含一个单词时,它可以工作,但当文件包含两个单词时,它就停止工作。它有任何错误吗空格有问题?我遗漏了什么?嗯,上面的第1行
示例对我很有用。你能试着通过seq-f'行%.0f'5>tmp_文件
生成一个文本文件,并将第1行\nline2\nline3\nline4\n
放在模式文件中吗?可能不相关,你使用的是哪个版本的OS&pcregep?我的PCRELEP版本是8.39 2016-06-14.