過去数日間、私はキーワードを含むファイルを報告するためにファイルディレクトリをマイニングしようとしました。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がこれを行う前に出力ファイルを作成した可能性があると思いました。する既存のコンテンツに追加する必要があります。