Linux脚本从文件夹和子文件夹中获取字符串模式的计数

问题描述 投票:0回答:1

我有一个文件夹,它有文件夹和子文件夹。

此文件夹和子文件夹包含类似的文件

input_abc.txt 

input_def.txt

pattern1是'RCA'pattern2为“ RSA”

文件夹信任:

文件夹-子文件夹-子文件夹:input_abc.txt:input_def.txt

[我必须从文件名为input_abc.txt的文件中获取字符串“ pattern1”的计数,并且必须从这些子文件夹中的文件名为input_def.txt的文件中获取字符串“ pattern2”的计数。

如何获得pattern1的计数以及文件名input_abc.txt和模式2以及Linux中这些文件夹和子文件夹中的文件名input_def.txt

linux bash shell
1个回答
0
投票

也许您需要find -iname NAME -exec grep -inr PATTERN {} \+

➜  a  tree
.
├── b
│   ├── abc.txt
│   └── def.txt
└── c
    ├── abc.txt
    ├── def.txt
    └── ghi.txt

2 directories, 5 files
➜  a  for f in {b,c}/*; do printf "$f -- "; cat $f; done
b/abc.txt -- patt1
b/def.txt -- patt2
c/abc.txt -- patt1
c/def.txt -- patt2
c/ghi.txt -- patt1
➜  a  find . -iname abc.txt -exec grep -inr PATT1 {} \+
./c/abc.txt:1:patt1
./b/abc.txt:1:patt1

这里会发生什么?

find查找具有给定名称的所有文件(这是一个glob,而不是正则表达式):-i表示忽略大小写,-exec对找到的文件运行以下命令(grep ...)(由{})。

[请注意\+,这意味着将所有找到的文件传递给单个grep(如果要将每个文件传递给不同的\;,请使用grep-将不会显示文件名)。] >

您可以看到patt1位于b/abc.txtc/abc.txtc/ghi.txt中,但是find将忽略后者(名称不匹配),并且grep将不在该文件上运行。

© www.soinside.com 2019 - 2024. All rights reserved.