使用 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)。

相关内容