2012-02-16 303 views
0

我对shell脚本世界非常陌生。我已经做了一些研究,但似乎目前还没有工作。Shell脚本:在文本文件中搜索多个字符串并显示包含字符串的行

我想要做的是我有两个txt文件。我想从文件B中的文件A中搜索所有字符串,并显示文件B中包含字符串的所有行。

到目前为止,我只有这个(请不要笑)......

#!bin/sh 
for LINE in 'cat $1' 
do 
grep '$LINE' $2 
done 

我想我试图使它的动态,这样我就可以这样

./script.ksh fileA.txt fileB.txt 
执行的东西

任何建议,将不胜感激,非常感谢!

+0

您是否尝试过的,而不是'grep的 '$ LINE' $ 2''grep的 “$ LINE” $ 2'? – 2012-02-16 15:47:41

+0

我刚刚做了,它没有拿出结果,因为我预期 – Tony 2012-02-16 16:00:52

回答

0

你非常接近你的目标,但是你的代码有一些小错误。

这应该工作:

#!/bin/sh 
for LINE in `cat $1` 
do 
    grep "$LINE" $2 
done 

下面是一个例子:

fileA.txt:

Hi 
Hello 
Hairy 
Harry 
Hates 
His 
Home 

fileB.txt:

James Bond likes Harry 
Sylvia is cool 
Fiona is mad 
Hello there 
Hairy toenails 

输出:

Hello there 
Hairy toenails 
James Bond likes Harry 
+0

你好,非常感谢你的快速回复。我刚试过,结果是我找不到任何东西。我创建了一个包含一系列字符串的文件,并将其中的一部分剪切为另一个文件。结果是它没有显示任何东西..... – Tony 2012-02-16 15:59:14

+0

你放入的文件的顺序是重要的。包含要搜索的字符串的文件应该是第一个,而搜索的文件应该是最后一个。希望这可以帮助!我添加了一个供参考的例子。 – ohaal 2012-02-16 16:02:54

+0

你好,我确实创建了一个名为try.sh的文件,并创建了两个文件,像你的。然后我运行这样的命令:./try.sh fileA.txt fileB.txt,它没有显示像你的结果...... – Tony 2012-02-16 16:04:07

3

无需脚本:

grep -f $1 $2 
0

伴侣,你的第一行包含个两个错误,它应该是这样的:

#! /bin/sh 

我把一些额外的空间,让你看出其中的差别,这可能是你的脚本不工作的原因。

没有什么大不了的,拼写错误发生,Bash可以是一个真正的PIA关于白色空间。

顺便说一句,好的旧差异呢?

diff file1 file2 

人1 DIFF

;)

相关问题