X線を切り取り、y位置(上部)にX線を挿入できるようにしたいです。これにより、一部の構成ファイルを再構成するのに役立ちます。
Text example line number 1 <--- Append line 10 above line 1
Text example line number 2
Text example line number 3
Text example line number 4
Text example line number 5
Text example line number 6
Text example line number 7
Text example line number 8
Text example line number 9
Text example line number 10 <--- Cut or hold in buffer
Text example line number 11
Text example line number 12
Text example line number 13
これまで私が見つけた唯一のことは次のとおりです。
# Cuts line 10 and adds it to the end of file
sed -n -e '10h;10!p;${g;p;}' file-01.txt
しかし、予約された内容を最後の行以外の行に入れる方法がわかりません。
残念ながら、私はsedに慣れていません。 stackoverflowとここでも同様の質問がありますが、必要に応じて修正することはできません。
私はsedを使用するソリューションを好んでいますが、このソリューションがawkなどの他のツールを使用して実装するのが簡単な場合は歓迎します。
答え1
sedを使う
テストファイルを作成しましょう。
$ seq 10 >file
5行目をファイルの先頭に移動するには:
$ sed '1,4{H;1h;d}; 5{p;x}' file
5
1
2
3
4
6
7
8
9
10
どのように動作しますか?
1,4{H;1h;d}
これにより、行1〜4が予約済みスペースに保存されます。
具体的には、予約済み
H
スペースに改行を追加した後、予約済みスペースに現在の行を追加します。 1行目の場合は改行文字は必要ないため、1h
1行目を改行なしで予約済みスペースに送信するコマンドを実行します。このd
コマンドは、印刷されないようにパターン空間から現在の行を削除します。5{p;x}
これにより、5行が印刷され、予約済みスペースが印刷されます。
p
sedにパターンスペース(行5を含む)を印刷するように指示します。x
これで、予約済みスペースの内容を印刷するようにsed putにモードと予約済みスペースを交換するように指示します。
5行目以降の行は変更されません。
awkを使う
$ awk 'NR<5{s=s ORS $0;next} NR==5{print $0 s;next} 1' file
5
1
2
3
4
6
7
8
9
10
ここのロジックはsedのロジックと非常によく似ています。 5行前のすべての行を変数に保存しますs
。 5行目に達すると、それを印刷してからsを印刷します。残りの行は変更されません。