如何在另一个模式中grep特定模式

时间:2014-06-16 04:22:02

标签: shell unix awk grep

我正在尝试编写一个shell脚本,其中包含一个包含文件名列表的文件。现在我想grep一个模式,如果它存在于该文件中。这是一个例子。

文件名:Check.txt

YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat

现在我想grep这个模式" 28590301456967003510KKKxxxxxxxxxxxxxxx_001_00051.dat"在文件Check.txt中。请注意,我只关注该特定文件模式的模式 28590301456967003510KKK 和序列 00051 。因为我会有多个文件来检查如何循环使用它。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在包含您要搜索的所有文件的目录中运行此命令,

grep '28590301456967003510KKK.*00051' *.txt

示例:

$ cat foo.txt
YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat

$ cat bar.txt
YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat
foo
bar

$ grep '28590301456967003510KKK.*00051' *.txt
foo.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
bar.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat

如果要在子目录中存在的文件内搜索模式,可以尝试此命令

$ find . -mindepth 1 -type f -name "*.txt" | xargs grep '28590301456967003510KKK.*00051'
./foo.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
./foo-bar/aa.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat

它找到文件及其路径以及与模式匹配的文本。

您也可以使用grep搜索子目录中的文件,

$ grep -R --include="*.txt" '28590301456967003510KKK.*00051' .
./aa1.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
./foo-bar/ram.txt:YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat

-R - >递归

--include="*.txt" - >只有.txt文件

'28590301456967003510KKK.*00051' - >图案

. - >当前目录。(从grep操作目录开始)。