일치하는 줄 다음에 다음 줄만 표시하는 방법?
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
일반적으로 여기에 많은 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
grep 으로이 작업을 수행하는 방법을 모르지만 awk를 사용하여 동일한 결과를 얻을 수 있습니다.
awk '/blah/ {getline;print}' < logfile
다음 행에 'blah'가 포함되어 있지 않으면 다음과 같이 필터링 할 수 있습니다.
grep -A1 blah logfile | grep -v blah
사용할 cat logfile | ...
필요가 없습니다.
펄 원 라이너 경고
그냥 재미를 위해 ... 경기 후 한 줄만 인쇄
perl -lne '$next=($.+1)if/match/;$.==$next&&print' data.txt
더 재미 ... 경기 후 다음 10 줄을 인쇄하십시오.
perl -lne 'push@nexts,(($.+1)..($.+10))if/match/;$.~~@nexts&&print' data.txt
실제로 두 가지 명령이 있기 때문에 속임수
It looks like you're using the wrong tool there. Grep isn't that sophisticated, I think you want to step up to awk as the tool for the job:
awk '/blah/ { getline; print $0 }' logfile
If you get any problems let me know, I think its well worth learning a bit of awk, its a great tool :)
p.s. This example doesn't win a 'useless use of cat award' ;) http://porkmail.org/era/unix/award.html
참고URL : https://stackoverflow.com/questions/7451423/how-to-show-only-next-line-after-the-matched-one
'Programing' 카테고리의 다른 글
'권장 권장 아이콘 파일-번들에 정확히'120x120 '픽셀의 iPhone / iPod Touch 용 앱 아이콘이 포함되어 있지 않습니다 (.png 형식). (0) | 2020.05.09 |
---|---|
현지화 및 국제화, 차이점은 무엇입니까? (0) | 2020.05.09 |
JavaBean과 POJO의 차이점은 무엇입니까? (0) | 2020.05.09 |
ADT에 'org.eclipse.wst.sse.core 0.0.0'이 필요하지만 찾을 수 없습니다 (0) | 2020.05.09 |
Linux에서 세그멘테이션 오류로 코어 덤프를 생성하는 방법은 무엇입니까? (0) | 2020.05.09 |