最後の行より2行前に新しい行を挿入したいです。したがって、私の元のファイルが次のような場合:
1
2
3
4
5
結果は
1
2
3
New line
4
5
ベストアンサー1
使用ed
:
$ printf '$-1i\nNew line\n.\n,p\n' | ed -s file
1
2
3
New line
4
5
スクリプトの編集ed
:
$-1i
New line
.
,p
$-1
まず、最後から1行上の行に移動()し、i
その行の上に新しい内容を挿入()します。挿入された内容は1点で終わります(複数行を許可)。最後は、,p
端末で完全に変更されたバッファを示しています。
新しいファイルにリダイレクトするか、以下を使用して元のファイルに書き換えることができます。
printf '$-1i\nNew line\n.\nw\n' | ed -s file
(,p
に変更w
)。
後者もex
このタスクで使用されます。
printf '$-1i\nNew line\n.\nw\n' | ex -s file
ed
ex
標準行ベースのエディタ(フルスクリーンエディタではありません)で、システムに付属している必要があります。これは-s
人によって異なる意味を持ちますが、このようなバッチモード編集操作を実行するときは両方に適用されます。
ed
。 「シェルとユーティリティ」 基本仕様。 IEEE 1003.1:2017。グループを開きます。ex
。 「シェルとユーティリティ」 基本仕様。 IEEE 1003.1:2017。グループを開きます。
追加資料:
- デール・ドハティとチーム・オライリー(1987)。 「シニアエディタ」。Unixテキスト処理。ヘイデンブックス。