Grep은 패턴 이전에 가장 최근 줄을 찾습니다.

Grep은 패턴 이전에 가장 최근 줄을 찾습니다.

GREP를 사용하여 "User-Agent: UA"에 대한 파일을 검색한 다음 "Via:"가 포함된 가장 가까운 줄을 추출하고 싶습니다. 내 문제는 때때로 "Via:"가 포함된 여러 줄이 있지만 마지막 줄만 원한다는 것입니다. .

예를 들어 구문 분석할 파일은 다음과 같습니다.

Via: 1.1.1.1  
not relevant line  
...
not relevant line N
User-Agent: UA
...
Via: 2.2.2.2
Via: 3.3.3.3
not relevant line
...
not relevant line N
User-Agent: UA
...
Via: 4.4.4.4
Via: 5.5.5.5
Via: 6.6.6.6
not relevant line
...
not relevant line N
User-Agent: UA

내가 원하는 결과는 "User-Agent:UA"에 가장 가까운 "Via:"를 포함하는 행입니다.

Via: 1.1.1.1
Via: 3.3.3.3
Via: 6.6.6.6

어떤 도움이라도 대단히 감사하겠습니다.

답변1

awk다음을 수행할 수 있습니다.

 awk '/Via/ {via_line=$0} /User-Agent: UA/ {print via_line}' input_file

따라서 Via해당 줄을 포함하는 모든 줄을 찾아 저장하고 이전 줄을 덮어쓴 다음 해당 줄을 찾으면 해당 줄에 대해 저장한 모든 내용을 User-Agent: UA인쇄합니다 .Via

답변2

sed를 사용하세요:

sed -n '/^Via/h;/^User-Agent: UA$/{g;p;}' file

산출:

통과됨: 1.1.1.1  
경로: 3.3.3.3
경로: 6.6.6.6

자동 인쇄를 비활성화하는 패턴 공간을 사용하십시오 -n. 복사 모드에서 줄이 Via공백으로 시작하는 경우 공백을 저장합니다( h). 예약된 공간을 덮어쓰게 됩니다. 라인에 "User-Agent: UA"가 포함되어 있으면 예약된 공간을 패턴 공간( g)에 복사하고 패턴 공간( p)을 인쇄합니다.

관련 정보