일치하는 줄 이전에 다른 것과 일치하는 첫 번째 줄로 돌아가기 전에 grep을 사용하여 컨텍스트 줄을 표시하시겠습니까?

일치하는 줄 이전에 다른 것과 일치하는 첫 번째 줄로 돌아가기 전에 grep을 사용하여 컨텍스트 줄을 표시하시겠습니까?

일치 항목을 찾았고 grep -e해당 일치 항목의 모든 줄을 다시 다른 일치 항목으로 인쇄하고 싶다고 가정해 보겠습니다 ----. 예를 들어 .

이것이 가능합니까, 아니면 이 작업을 수행하려면 다른 명령이나 다른 것을 사용해야 합니까 awk?

예를 들어 다음 파일이 있는 경우:

----
Ticket Number: 5465415312

Software Services
Notepad
Text

Description: 
My Notepad won't type text.

출력은 다음과 같아야 합니다.

----
Ticket Number: 5465415312

Software Services

다시 일치합니다 ----.Software Services

답변1

sed -n '/----/,/Software Services/{p;/Software Services/q}' file

산출:

----
티켓 번호: 5465415312

소프트웨어 서비스

답변2

다음을 사용하여 awk이 작업을 수행하는 간단한 방법은 다음과 같습니다 .

awk '/^----$/,/^Software Services$/' file

길고 우회적인 접근 방식:

awk '/^----$/              { lines = "" }
                           { lines = (lines == "" ? $0 : lines ORS $0) }
     /^Software Services$/ { print lines }' file

즉, lines4개의 대시 라인을 칠 때마다 저장된 문자열이 지워집니다. 그러면 현재 행이 항상 추가되고, 입력 데이터에서 "트리거링" 행을 찾으면 lines무엇이 인쇄됩니다 .lines

관련 정보