현재 다음 텍스트 블록이 포함된 텍스트 파일로 작업하고 있습니다.
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordD
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordd
Text
End of block
--------------------------------------
목적은 egrep이 특정 키워드를 감지하도록 하는 것이며 이러한 단어가 있으면 해당 청크를 다른 파일에 복사하고 싶습니다. 그래서 저는 현재 다음을 검색하고 있습니다.
if egrep -wi 'keywordA|KeywordB|keywordC' Report
then
echo "Words found!"
else
echo "No words found!"
fi
sed(예를 들어)를 사용하여 단어가 발견된 텍스트 블록을 복사하기 위해 후속 작업을 추가할 수 있는 방법이 있는지 궁금합니다.
이 예에서 예상되는 출력은 다음과 같습니다.
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
"보고서" 파일에는 이러한 블록이 수십 개 포함되어 있지만 모두 키워드가 있는 것은 아닙니다. 난 그냥 이런 일을 하는 사람들을 따라하고 싶을 뿐이야(위의 예에서 보듯이).
답변1
마법 명령은 매우 간단합니다 awk
.
awk -v RS="--------------------------------------"
'/keywordA/||/keywordB/||/keywordC/' RS='' infile.txt
다음과 같이 예상되는 출력을 얻게 됩니다.
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
--------------------------------------
Beginning of block
Text
Random Text
keywordA
Text
End of block
--------------------------------------
답변2
어쩌면 다음과 같이 뭔가를 할 수도 있습니다:
awk '
{
if(/--------------------------------------/) {
if(found)
printf buffer
buffer = ""
found = 0
} else
buffer = buffer $0 "\n"
}
/keyworda|keywordb|whateveryouwant/ {
found = 1
}
' input_file.txt
필요에 따라 정규식 끝 부분에서 키워드를 조정하면 됩니다. 나는 줄을 변수에 저장하고, 줄에 도달했을 때 ----…----
원하는 키워드를 만나면 변수의 내용을 인쇄한 다음 변수를 비우고 흥미로운 키워드를 찾았다는 사실을 잊어버립니다. 이것이 당신이 원하는 것이기를 바랍니다. 필요하다면 여전히 편집할 수 있을 것 같아요.
그러면 관심 있는 블록이 표준 출력으로 출력됩니다. 출력을 파일로 리디렉션하여 복사합니다.