키워드 목록에서 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각 키워드에 대해 세 번 쓰기보다 전체 루프에 대해 한 번 쓰기를 여는 것이 더 효율적입니다(무한히 더 작습니다).

<html><head>…</head><body> PS 이 작업을 수행하기 전에 출력 파일을 작성했을 수도 있다는 생각이 들었습니다 .하다기존 콘텐츠에 추가해야 합니다.

답변2

안녕하세요 David - G-Man의 답변에 의견을 추가하고 싶었지만 요점이 없습니다.

재귀 grep을 사용하여 이것을 추가하고 싶었을 때 와일드카드 대신 검색할 디렉터리를 지정할 수 있으므로 grep -lr -Fiw "$w" . … .

관련 정보