패턴이 포함된 라인이 감지된 경우밤, 다른 패턴을 포함하는 해당 라인을 감지해야 합니다.===이는 아래와 같이 더 높은 라인에서만 발생합니다.
- 문서 내용:
=== test1.log
부
바
게임
=== 파일23.txt
밤 78
멀리
밤
텍스트
=== log3.c
AAA
제한
저녁 3
- 산출:
=== 파일23.txt
밤 78
밤
=== log3.c
저녁 3
답변1
다음과 같이 awk를 사용하여 이를 수행할 수 있습니다.
awk '/===/ {SEC=$0;PRINTED=0} /night/ {if(!PRINTED) print SEC; print $0; PRINTED=1;}' <file>
라인을 찾아 ===
저장하고 아직 라인을 인쇄하지 않았음을 확인합니다. 그런 다음 패턴을 찾으면 night
섹션 헤더가 인쇄되었는지 확인하고, 그렇지 않으면 인쇄한 다음 현재 줄을 인쇄하고 섹션 헤더가 인쇄되었음을 표시합니다.
답변2
sed로 이것을 시도했습니다.
sed -n '/===/{
h
d
}
/night/{
G
s/\(.*\)\n\(.*\)/\2\
\1/p
}' inputFile
이것은 정확히 당신이 원하는 것은 아니지만 매우 유사합니다.
=== file23.txt
night78
=== file23.txt
night
=== log3.c
night3
/==
현재 모드를 버퍼에 저장/night
토큰 밤을 포함하는 모든 줄과 일치합니다.G
현재 버퍼를 현재 패턴 공간에 추가합니다./s
현재 패턴 문자열과 현재 버퍼 문자열의 위치를 바꿉니다.