명령에서 최종 일치 문자열이 아닌 grep -f input_pat.txt match_in.txt
일치 패턴을 인쇄하는 방법을 찾고 있습니다 .input_pat.txt
matched_in.txt
예를 들면 input_pat.txt
다음과 같습니다.
abc...blahblah
그리고 match_in.txt
:
abcdefblahblah
"abc...blahblah"
출력물에 인쇄하고 싶습니다 .
답변1
grep을 두 번 호출하면 수행할 수 있습니다. 약간 비싸지만 작업이 완료됩니다. 패턴 파일이 pat.txt이고 검색하려는 파일이 data.txt라고 가정해 보겠습니다.
paste <(grep -o -f pat.txt data.txt ) <(grep -f pat.txt data.txt )
두 명령의 두 출력이 파일로 처리 <( ... )
되도록 프로세스 대체를 사용합니다 . paste
첫 번째 명령에서 -o
옵션은 일치하는 패턴만 인쇄합니다. 두 번째 명령에서는 완전히 일치하는 줄을 인쇄합니다.
순서는 일대일이므로 두 출력을 나란히 붙여넣는 것이 안전합니다(grep을 수행할 때 스키마 파일이나 데이터 파일이 변경되지 않았다고 가정).
답변2
확장 정규식(예: grep -E
)으로 전환하는 것이 허용되는 경우 awk
반대 접근 방식을 사용하여 다음을 수행할 수 있습니다.
awk '
!end_of_re_list {if (!(re[$0]++)) n++; next}
{
for (i in re)
if ($0 ~ i) {
print i
delete re[i]
if (--n == 0) exit
}
}' input_pat.txt end_of_re_list=1 match_in.txt