2012-02-16 10 views
0

シェルスクリプトの世界では初めてです。私はこれについていくつかの研究を行ってきましたが、これまでのところうまくいかないようです。シェルスクリプト:テキストファイル内の複数の文字列を検索し、文字列を含む行を表示します。

私がしようとしているのは、2つの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'を試したことがありますか? –

+0

私はちょうどやったし、期待どおりに結果を出してこなかった – Tony

答えて

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

+0

あなたが入れたファイルの順序は重要です。検索する文字列を含むファイルは最初に、検索するファイルは最後にする必要があります。お役に立てれば!参考のために例を追加しました。 – ohaal

+0

こんにちは、私はtry.shという名前のファイルを作成し、あなたのような2つのファイルを作成しました。 ./try.sh fileA.txt fileB.txtのようなコマンドを実行しましたが、あなたのような結果が表示されませんでした.... – Tony

3

スクリプトは必要ない:

grep -f $1 $2 
0

メイト、あなたの最初の行が含まれてい個の2つのエラー、それはこの方法でなければなりません:

#! /bin/sh 

私はあなたの違いが表示されるように、これはあなたのスクリプトが動作しないための原因である可能性があり、いくつかの余分なスペースを置きます。

大したことはありません。タイプミスが発生し、Bashは空白に関して非常に実際のPIAになります。

ところで、何が良い古い違いは?

diff file1 file2 

男1デフ

;)

関連する問題