キーワードリストからgrep

キーワードリストからgrep

過去数日間、私はキーワードを含むファイルを報告するためにファイルディレクトリをマイニングしようとしました。grepとの正しい構文を示す他のユーザーの助けを借りて、非常にうまく動作する次のsed解決策を思い出しました。残念ながら少し反復的なのでリファクタリングしたいです。

echo "<HR><BR><B><h2>Search for Keyword:  KeyWord1<BR></B></h2><ol>"  >> temp.txt
grep -lr -Fiw 'KeyWord1' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'  >>  temp.txt
echo "</ol>"   >> temp.txt 

echo "<HR><BR><B><h2>Search for Keyword:  KeyWord2<BR></B></h2><ol>"  >> temp.txt
grep -lr -Fiw 'KeyWord2' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'  >>  temp.txt
echo "</ol>"   >> temp.txt 

echo "<HR><BR><B><h2>Search for Keyword:  KeyWord3<BR></B></h2><ol>"  >> temp.txt
grep -lr -Fiw 'KeyWord3' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'  >>  temp.txt
echo "</ol>"   >> temp.txt 

上記で生成されたものと同じ出力を生成しますが、混乱を取り除きたいと思います。次の目標を正しく達成する方法を教えてください。

Var myList = "KeyWord1, KeyWord2, KeyWord3"

while myList; Do
    echo "<HR><BR><B><h2>Search for Keyword:  $myList<BR></B></h2><ol>"  >> temp.txt
    grep -lr -Fiw '$myList' * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'  >>  temp.txt
    echo "</ol>"   >> temp.txt 
; done

ベストアンサー1

あなたの推測はかなり近いです。あなたはできます

for w in 'KeyWord1' 'KeyWord2' 'KeyWord3'
do
    echo "<HR><BR><B><h2>Search for Keyword:  $w<BR></B></h2><ol>"  >> temp.txt
    grep -lr -Fiw "$w" * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'  >>  temp.txt
    echo "</ol>"   >> temp.txt
done

スタイルの問題で、私はそれを次のように変更します。

for w in 'KeyWord1' 'KeyWord2' 'KeyWord3'
do
        echo "<HR><BR><B><h2>Search for $w:  KeyWord1<BR></B></h2><ol>"
        grep -lr -Fiw "$w" * | sed -e 's|.*|<li><a href="http://&">&</a></li>|'
        echo "</ol>"
done  > temp.txt

あなたのバージョンでは、この新しいコンテンツを既存のtemp.txtファイルに追加します。これが本当に必要な場合は、>次をに変更します>>。その後、temp.txt各キーワードに対して3回の書き込みよりも、ループ全体に対して1回の書き込みを開く方が効率的です(無限に小さくなります)。

<html><head>…</head><body> PSがこれを行う前に出力ファイルを作成した可能性があると思いました。する既存のコンテンツに追加する必要があります。

おすすめ記事