지난 며칠 동안 저는 키워드가 포함된 파일을 보고하기 위해 파일 디렉터리를 마이닝하려고 했습니다. 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
각 키워드에 대해 세 번 쓰기보다 전체 루프에 대해 한 번 쓰기를 여는 것이 더 효율적입니다(무한히 더 작습니다).
<html><head>…</head><body>
PS 이 작업을 수행하기 전에 출력 파일을 작성했을 수도 있다는 생각이 들었습니다 .하다기존 콘텐츠에 추가해야 합니다.
답변2
안녕하세요 David - G-Man의 답변에 의견을 추가하고 싶었지만 요점이 없습니다.
재귀 grep을 사용하여 이것을 추가하고 싶었을 때 와일드카드 대신 검색할 디렉터리를 지정할 수 있으므로
grep -lr -Fiw "$w" . …
.