grep -A1 'blah' logfile
‘blah’가있는 모든 줄에 대해이 명령 덕분에 ‘blah’가 포함 된 줄과 로그 파일에서 다음 줄이 출력됩니다. 그것은 간단한 일이 될 수도 있지만 나는 ‘ㅋ’을 가지고 있으며, 그 라인을 생략 할 수있는 방법 찾을 수없는 경우에만 출력에 다음 줄을 표시합니다.
답변
awk로 시도해 볼 수 있습니다.
awk '/blah/{getline; print}' logfile
답변
grep을 고수하려는 경우 :
grep -A1 'blah' logfile|grep -v "blah"
또는
sed -n '/blah/{n;p;}' logfile
답변
파이핑은 당신의 친구입니다 …
사용 grep -A1
경기 후 다음 줄을 표시하려면 다음 파이프 결과에 tail
만 1 개 라인을 잡아,
cat logs/info.log | grep "term" -A1 | tail -n 1
답변
raim의 큰 대답은 나에게 매우 유용했습니다. 패턴 다음에 7 행을 인쇄하기 위해 이것을 확장하는 것은 사소한 일입니다
awk -v lines=7 '/blah/ {for(i=lines;i;--i)getline; print $0 }' logfile
답변
다음 줄에 ‘blah’가 포함되어 있지 않으면 다음을 사용하여 필터링 할 수 있습니다.
grep -A1 blah logfile | grep -v blah
사용할 cat logfile | ...
필요가 없습니다.
답변
일반적으로 여기에 많은 grep을 요구하고 있으며 다른 도구가 더 나은 솔루션 일 수 있음에 동의합니다. 그러나 임베디드 환경에서 나는 이것을하고 싶 sed
거나 하지 않을 수 있습니다 awk
. 다음 솔루션이 작동한다는 것을 알았습니다 (연속적으로 일치하지 않는 한).
grep -A1 AT\+CSQ wvdial.out | grep -v AT\+CSQ
기본적으로 각 일치 항목에 대해 한 줄의 컨텍스트를 추가하여 일치시킨 다음 원래 패턴의 역 일치 항목을 통해 파이프를 제거하십시오. 이것은 물론 패턴이 “다음”줄에 나타나지 않는다고 가정 할 수 있음을 의미합니다.
답변
지금 까지이 질문에 많은 좋은 답변이 주어졌지만을 awk
사용하지 않는 사람은 여전히 그리워 getline
합니다. , 때문에 일반적으로 , 그것은 사용할 필요가 없습니다 getline
, 나는 갈 것이다 :
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
또는
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
논리는 항상 “blah”가있는 행을 저장 한 다음 한 행 뒤에있는 행을 인쇄하는 것으로 구성됩니다.
테스트
샘플 파일 :
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
“blah”다음에 모든 줄을 가져옵니다. 첫 번째 뒤에 나타난 경우 다른 “blah”를 인쇄합니다.
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
“blah”자체를 포함하지 않으면 “blah”뒤에 모든 줄을 가져옵니다.
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7