sed를 사용하여 일치하는 줄을 다른 일치하는 줄 위로 이동

sed를 사용하여 일치하는 줄을 다른 일치하는 줄 위로 이동

나는 다음과 같은 것을 가지고 있습니다

dsadjakldjska
safdsfdsfsf
fdsfsf**STGN**fdsfsd
fdsfkjldsf
fdsff
fdsfs**IRV**fdsfs

난 갖길 원해

dsadjakldjska
safdsfdsfsf
fdsfkjldsf
fdsff
fdsfsf**STGN**fdsfsd
fdsfs**IRV**fdsfs

그러나 줄 간격(예: 파일 끝까지 줄 40000)에만 해당됩니다(STGN을 포함하는 줄을 다음 IRV 바로 위로 이동).

이 작업을 어떻게 수행할 수 있는지 아십니까? 아니면 sed보다 더 나은 대안이 있습니까?

답변1

awk 'NR < 40000 {print; next}
     /\*\*STGN\*\*/ {line = $0; next}
     /\*\*IRV\*\*/ && line {print line; line=""}
     {print}'

그리고 sed:

sed -e '40000,$!b' -e '/\*\*STGN\*\*/{h;d;}' -e '/\*\*IRV\*\*/{x;/./p;s/.*//;x;}'

(그들은 STGN이 발생한다고 가정합니다.앞으로IRV).

관련 정보