나는 종종 다음과 같은 문자 메시지를 게시합니다.
pose:
-
position:
x: 0.0
y: 0.0
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
-
position:
x: 0.350104982508
y: 0.729534356813
z: -3.10228873344e-06
orientation:
x: -9.84128404362e-07
y: -1.996909502e-06
z: -0.447019362477
w: 0.894524281149
-
position:
x: 0.455011
y: -1.59228
z: 0.0
orientation:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
나는 이것을 grep이나 다른 유사한 도구로 파이프하여 "pose:" 다음의 12번째 라인에서 시작하고 "pose:" 다음의 20번째 라인에서 끝나는 영역을 표시하고 싶습니다. grep의 기본 명령을 사용하면 "pose:" 앞이나 뒤에 n 줄만 표시할 수 있습니다. 제 경우에는 다음 하위 메시지를 표시하고 싶습니다.
position:
x: 0.350104982508
y: 0.729534356813
z: -3.10228873344e-06
orientation:
x: -9.84128404362e-07
y: -1.996909502e-06
z: -0.447019362477
w: 0.894524281149
이를 수행하는 명령줄 도구가 있습니까?
답변1
awk '/^pose:/{s=NR+11} (NR>s && NR<s+10){print $0}'
줄이 pose:
, 로 시작하는 경우 s
로 설정합니다 NR+11
. 행 NR
보다 크 s
거나 작을 경우 s+10
인쇄됩니다.
답변2
대체된 답변:
기본적으로 "다음 20줄 모두"에서 "다음 5줄"을 빼는 문제입니다.
내 빠른 조언은 다음과 같습니다.
diff <(grep 'pose:' filename -A 20) <(grep 'pose:' filename -A 5)
물론 diff 출력에는 추가 헤더 줄과 "<" 기호가 포함되므로 필터링해야 할 수도 있습니다.
필터링해도 별거 아닌데
답변3
(grep -A 20 "pose:" file; echo "--")|grep -B 9 '^--'