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

おすすめ記事