使用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.