여러 줄의 출력이 있고 일부 줄에는 대기 중인 작업에 대한 정보가 포함되어 있습니다. 예를 들어 패턴이 여러 번 나타나는 줄을 선택하고 싶습니다.
jobs waiting: 0
예:
abcdef rglk,jobs waiting: 2,blah,blah,jobs waiting:0,jobs running: 1,blah,blah
lbf(kjn fk)kkj,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
gdjhgvdjh,jobs waiting: 0,blah,blah,jobs running: 1,blah,blah,jobs waiting: 0
g gg,jobs waiting: 2,blah,jobs waiting: 0,jobs running: 1,blah,blah
kjn dikfc,jobs waiting: 0,blah,jobs waiting: 0,jobs running: 1,bl ah,blah
d1d,jobs waiting: 2,blah,blah,jobs running: 1,blah,blah
kjfdk nrf(lkj rgf),jobs waiting: 2,blah,blah,jobs waiting: 0,bl ah,blah
명령이 3행과 5행만 반환하는 경우 작동합니다. 반대 행도 선택할 수 있기를 원합니다. 불행히도 sed를 사용하여 이 작업을 수행하는 방법을 모르겠습니다. 어? 포도?
답변1
키스 하는 법 grep
:
grep 'jobs waiting: *0.*jobs waiting: *0' file
명령줄 스위치를 추가하여 -v
이를 되돌립니다 .
대체 sed
- 두 번째 인스턴스 교체를 시도하고 성공하면 다음 줄을 인쇄합니다.
sed -n 's/jobs waiting: *0/&/2p' file
그 반대는
sed -n 's/jobs waiting: *0/&/2; t; p' file
awk 메소드 - a의 반환 값 사용 gsub
:
awk 'gsub(/jobs waiting: *0/,"&",$0) == 2' file
다음으로 전환
awk 'gsub(/jobs waiting: *0/,"&",$0) != 2' file
(모든 경우에 귀하의 예와 일치하여 *0
0개 이상의 선행 공백 문자가 허용됩니다 0
.)
답변2
awk
다음을 사용하여 필요한 행을 얻을 수 있습니다 .
awk -F'jobs waiting: *0' 'NF > 2'
필수 문자열을 기준으로 레코드를 분할할 때 인스턴스가 2개 이상 포함되어 있으면 필드 수가 3개 이상이 됩니다.
화타이