我正在尝试编写一个shell脚本,其中包含一个包含文件名列表的文件。现在我想grep一个模式,如果它存在于该文件中。这是一个例子。
文件名:Check.txt
YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat
现在我想grep这个模式" 28590301456967003510KKKxxxxxxxxxxxxxxx_001_00051.dat"在文件Check.txt中。请注意,我只关注该特定文件模式的模式 28590301456967003510KKK 和序列 00051 。因为我会有多个文件来检查如何循环使用它。谢谢你的帮助。
答案 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操作目录开始)。