Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用grep查找具有1个以上匹配项的文件_Regex_Bash_Sed_Grep - Fatal编程技术网

Regex 使用grep查找具有1个以上匹配项的文件

Regex 使用grep查找具有1个以上匹配项的文件,regex,bash,sed,grep,Regex,Bash,Sed,Grep,我想知道是否有一种方法可以使用grep列出超过1个匹配项的文件。这是我正在做的。我试图浏览一个客户的网站,用字符串替换最后一个匹配项。因此,在每一页的底部,他都有一行: <p align="center"><font face="Arial" color="#808080" size="2"> <?php include 'footer.php'; ?> 后跟一个页脚。我需要用以下行替换它(使用sed): <p align="center">

我想知道是否有一种方法可以使用grep列出超过1个匹配项的文件。这是我正在做的。我试图浏览一个客户的网站,用字符串替换最后一个匹配项。因此,在每一页的底部,他都有一行:

<p align="center"><font face="Arial" color="#808080" size="2">
<?php include 'footer.php'; ?>

后跟一个页脚。我需要用以下行替换它(使用sed):

<p align="center"><font face="Arial" color="#808080" size="2">
<?php include 'footer.php'; ?>

但是我想隔离只有第一行的一个实例的文件,这样我就可以替换它们。我的问题的另一个解决方案是仅在最后一个匹配上使用sed,或者在文件的最后50行上使用sed。有什么想法吗?

我会用这个:

for a in *; do one=\`grep exit $a | wc -l\`; if [ $one = 1 ]; then echo replace in $a; fi; done

代替echo,进行替换。

您可以实际使用
grep-c
获取文件中的匹配计数:

grep -c '<p align="center"><font face="Arial" color="#808080" size="2">' file
grep-c'

'文件

存储其输出

cnt=$(grep -c '<p align="center"><font face="Arial" color="#808080" size="2">' file)
cnt=$(grep-c'

'文件)


这是一个非常简单、优雅的问题解决方案。直接解析数据。这对于methis是一个不错的解决方案,但我选择了另一个答案,因为它是一个更短的解决方案,并且只使用grep,而不是同时使用多个不同的工具。像厕所