LoginSignup
1
1

More than 1 year has passed since last update.

sedでファイルの先頭or末尾に文字列を挿入

Last updated at Posted at 2022-05-21

sedでファイルの先頭or末尾に文字列を挿入する方法

この投稿はsedで下記の目的で使う方法のメモです。

  • 本文

    • ファイルの先頭に文字列を挿入する
    • ファイルの末尾に文字列を追加する
  • おまけ

    • ファイルに先頭行を挿入する
    • ファイルに末尾行を追加する

用例

用例を見ていただければ大体何しているかわかると思います。

全用例の前提として、inという名前のファイルをカレントディレクトリに作ってあります。
その内容は下記とします。

in
foo
bar

ファイルの先頭に文字列を挿入する

下記がそのシェルコマンドです。

sed -e '1s|^|head-|g' in > out

結果、outの内容は、inの先頭に「head-」という文字列を挿入した内容になります。
下記がその内容です。

out
head-foo
bar

ファイルの末尾に文字列を追加する

下記がそのシェルコマンドです。

sed -e '$s|$|-tail|g' in > out

結果、outの内容は、inの末尾に「-tail」という文字列を追加した内容になります。
下記がその内容です。

out
foo
bar-tail

蛇足

オプションと引数の説明

投稿本文中でsedの-eオプションに与えている文字列について少し説明します。

文字列は、 sedコマンド|置換前文字|置換後文字 の順で並んでいます。

ここではsedコマンドは置換前文字を探す範囲を指定しています。
先頭に挿入する方法で書いた1sというsedコマンドは、ファイルの一行目を範囲指定します。
末尾に挿入する方法で書いた$sというsedコマンドは、ファイルの最終行を範囲指定します。

置換前文字の"^"と"$"ですが、これらは下記対象の正規表現です。

正規表現
^ : 行頭
$ : 行末

本文中のsedコマンドでは、これらのsedコマンドと正規表現(置換前文字)を利用して、ファイル先頭・末尾を指し示して、置換を行っています。

蛇足のおまけ

ちなみに、置換後文字にも正規表現を含めることができます。
例えば、下記に示すようにファイル先頭行・末尾行を追加できます。

正規表現
\n : 改行

ファイル先頭行を追加する

sed -e '1s|^|head-\n|g' in > out

out
head-
foo
bar

ファイル末尾行を追加する

sed -e '$s|$|\n-tail|g' in > out

out
foo
bar
-tail

echo -tail>> inと同じことをしています。

あとがき

まだsedを使い始めてから間もないです。
なるべく覚えやすい書き方を知りたいです。

この投稿の背景は、テキストエディタで開けない大容量のバイナリファイルの編集をする必要があったことです。
ファイル先頭と末尾に文字列を追加する必要がありました。
sedに興味があるので、sedを使おうと思いました。
sedは大容量のファイルの編集にも役立つと知りました。面白いです。

ただ、使い慣れていないので、sed実行後にちゃんと望み通りの文字を追加できたか確認したくなりました。
先頭と末尾への追記をそれぞれ確認するには、下記のようなコマンドが役に立ちました。

位置 シェルコマンド 出力文字列
先頭 head -c 5 out head-
末尾 tail -c 5 out -tail

(先頭および末尾から5文字分の出力をしています)

スクリプトの区切り文字に|を使った理由

通常、sedスクリプトの区切り文字には/を使うことが多いと思います。
今回は、あえて|を使ってみました。
理由は、もし、置換前文字や置換後文字がパス文字列等(e.g. /usr/bin)を含むならば、区切り文字|を使うことによってエスケープシーケンスを省略できるからです。
覚えたてなのでエスケープシーケンスが少ない方が、見た目的にとっつきやすく感じたり、考慮することが少ないと感じています。

区切り文字 シェルコマンド
/ sed -e 's/\/bin/\/usr\/bin/g in > out
| sed -e 's|/bin|/usr/bin|g' in > out

区切り文字については次の記事を参考にしました : sed でエスケープ処理をしないでURLの置換を行う

次に読みたいもの

gnu公式サイトのsedコマンドマニュアル
gnu公式サイトのsedコマンド一覧
sedで使う正規表現の仕様(IEEEのもの)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1