2014-06-16 50 views
0

我想写一个shell脚本,其中我有一个文件的文件名列表中的文件。现在我想grep如果它存在于该文件中的模式。这里是例子。如何在另一种模式内grep的特定模式

文件名:Check.txt

YYY28590301456967003510KKKxxxxxxxxxxxx_001_00051_20140616.dat 
YYY5125741025CCCxxxxxxxxxxxxxxxxxxxxxx_002_05977_20140616.dat 

现在我想给grep的文件Check.txt内这种格局 “28590301456967003510KKKxxxxxxxxxxxxxxx_001_00051.dat”。请注意,我只关注针对该特定文件模式的模式28590301456967003510KKK和序列。因为我将有多个文件来检查如何循环。谢谢你的帮助。

+0

无论何时您在shell中编写循环来解析文本文件,您都有错误的方法。这听起来像你只需要一个简单的'grep'命令(请参阅@ AvinashRaj的答案),但如果您的要求比您告诉我们的还多,那么您就可以使用'awk'。无论哪种情况,您都不会编写shell循环。 –

回答

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 

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

OR

,你可以使用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操作将要发生)。

+0

嗨,如果它实际上是一个循环,那么我该怎么做。?个别地,它是好的:) – user2647888

+0

你的意思是如果文件在子目录内? –

+0

嗨,我认为这里有一点点困惑。我所有的文件名都在特定的文件中,我只想在特定文件中搜索模式,而不是在任何目录中搜索模式。 – user2647888