grep -A 역 일치 - 다음 필드의 불일치만 인쇄합니다.

grep -A 역 일치 - 다음 필드의 불일치만 인쇄합니다.

"200 OK"를 여러 번 인쇄하는 파일이 있습니다. 나는 "COMMAND" 모드 뒤에 나타나는 마지막 "200 OK"에만 관심이 있습니다. 내 특정 파일에서는 "COMMAND"가 100번 인쇄되었습니다. 다음과 같습니다.

otherdata
200 OK
otherdata 
200 OK
COMMAND
200 OK

그래서 명령어를 사용합니다.

grep -A1 COMMAND file | grep -v '200 OK' 

그러면 다음과 같은 결과가 나옵니다.

COMMAND xxxxx PASSWORD xxxxxx
--
COMMAND xxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxx
--
COMMAND xxxxxx PASSWORD xxxxxx
513 unknown user account
--
COMMAND xxxxxx PASSWORD xxxxxxx
--

나는 200 OK를 제외한 모든 것을 얻었지만 다음을 포함하는 줄은 필요하지 않습니다.

COMMAND xxxxx PASSWORD xxxxx
---

200 OK가 아닌 줄과 그 위의 줄만 출력하려면 어떻게 해야 합니까? 이상적으로는 출력에 이와 같은 줄만 포함하고 다른 줄은 포함하지 않기를 바랍니다. 513은 하나의 예일 뿐이며 다른 경우도 있을 수 있습니다.

COMMAND xxxxx PASSWORD xxxxxx
513 user account unknown

답변1

당신은 이것을 할 수 있습니다 sed:

sed -n -e '/COMMAND/{N;/200/! p;}' file

기본적으로 이것은 -n한 줄을 인쇄하지 않는 데 사용되며, 한 줄이 일치하면 COMMAND해당 줄을 다음 줄과 연결합니다( N그렇지 않으면 200결합된 줄을 인쇄합니다.

관련 정보