![sed를 사용하여 일치하는 줄을 다른 일치하는 줄 위로 이동](https://linux55.com/image/41591/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%20%EC%9C%84%EB%A1%9C%20%EC%9D%B4%EB%8F%99.png)
나는 다음과 같은 것을 가지고 있습니다
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).