如何解决搜索包含两个或两个以上带有新行的文本之间的特定单词的文件
我需要搜索包含一个或多个特定单词(在我的情况下为NORMAL
)中出现两次或多次的文件,因此请从以下文件中进行搜索:
file1.txt :
the NORMAL things are [
- case
- case 2
a NORMAL is like [
- case 3
- case 4
]
]
file2.txt :
the NORMAL things are [
- case
- case 2
a DIFFERENT is like [
- case 3
- case 4
]
]
file3.txt :
the NORMAL things are [
- case
- case 2
]
它将仅找到 file1.txt 。
我尝试使用简单的grep
:
grep -Ri "*NORMAL*NORMAL*" .
但它不起作用。
谢谢
解决方法
如果您不想递归搜索:
grep -lzE '(NORMAL).*\1' files*
如果您希望进行递归搜索:
grep -rlzE '(NORMAL).*\1' .
此命令将在当前目录中递归检查文件中包含NORMAL
后跟NORMAL
(\1
)的文件。表示它将匹配2个或更多匹配项。这仅是打印文件名,删除-l
以打印内容+文件名。
-l
:仅当与grep
匹配时才会打印文件名。-z
:数据行以0字节结尾,而不是换行符-E
:使用扩展的正则表达式-r
:递归
使用grep -c
打印匹配计数:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>retry-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>retry-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
</properties>
在这种情况下,您还需要第二个grep -c 'PATTERN' file(s)
或类似的内容,以根据匹配数过滤(此处,排除具有0或1个匹配项的文件):
grep -Pv
在这里,grep -c 'NORMAL' files | grep -P -v ':[01]$'
::[01]
后跟0或1(选择0或1个匹配项)。:
:该行的结尾。
另请参见:
-c
--count
抑制正常输出;而是为每个输入文件打印匹配行数。使用-v(--invert-match)选项,计数 不匹配的行。 (-c由POSIX指定。)-P
--perl-regexp
将模式解释为与Perl兼容的正则表达式(PCRE)。-v
--invert-match
反转匹配感,以选择不匹配的行。 (-v由POSIX指定。)
(来自GNU Grep 3.4)
,fgrep -c'NORMAL'文件* | awk -F“:”'$ NF> = 2 {print}'
file1.txt:2
如果您也要打印搜索结果,则
fgrep -c'NORMAL'文件* | awk -F“:”'$ NF> = 2 {打印}'| grep NORMAL $(awk -F“:”'{print $ 1}')
正常的事物是[
NORMAL就像[
,使用grep -o选项:
例如:
grep -o NORMAL file1.txt | wc -l --> 2
grep -o NORMAL file2.txt | wc -l --> 1
grep -o NORMAL file3.txt | wc -l --> 1
现在可以与克劳斯一起使用:
if [ `grep -o NORMAL file1.txt | wc -l` -ge 2 ];then echo "Count is greater than or equal to 2";else echo "Count is less than 2";fi
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。