クリップボードにコピーしました!
文字列のsed

sedで改行を操作する完全ガイド|挿入・置換・削除(BSD/GNU両対応)

updated: 2026/05/15 created: 2025/10/05

はじめに

テキスト処理で頻繁に登場するのが「改行」の扱いです。特にsedは、シンプルながら強力にテキストを加工できるコマンドであり、改行の挿入・削除・置換も柔軟に行えます。

ただし初学者にとっては、「改行がうまく入らない」「BSDとGNUで挙動が違う」といったポイントでつまずきやすいのも事実です。本記事では、実際のコマンド例をもとに、sedで改行を扱う方法をわかりやすく解説します。

参考: GNU sed

sedで改行を先頭に挿入するコマンドの仕組み

今回使用するコマンドは以下です。

sed '1i\ \ ' input.txt

このコマンドは、ファイルの先頭に空行(改行)を挿入する処理を行います。

要素説明
11行目を指定
i指定行の前に挿入
\改行を表現するためのエスケープ
空行実際に挿入される改行
input.txt対象ファイル

BSD版のsedでは、このようにバックスラッシュの後に改行を書く必要がある点に注意が必要です。

実行前の状態

まずはファイルを作成します。

cat << 'EOF' > input.txt hello world EOF

input.txtの内容は以下です。

hello
world

実行後の状態

コマンドを実行します。

sed '1i\ \ ' input.txt

出力結果は以下です。


hello
world

先頭に1行の空行(改行)が追加されていることが確認できます。

実行画像

catコマンドでinput.txtを作成し、sedコマンドで先頭に空行を追加する例

GNU sedとBSD sedの挙動の違い

GNU sedでは、改行の扱いが簡潔です。例えば空行追加は次のように書けます。

sed '1i\'$'\n' input.txt

または

sed '1i\ ' input.txt

BSD版は「バックスラッシュ+改行」を厳密に書く必要があり、ここが混乱しやすいポイントです。

改行をスペースに置換するsedコマンドの仕組み

以下のコマンドを使用します。

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/ /g' input.txt

コマンドの仕組み

要素説明
-e複数コマンドを指定
:aラベルaを定義
N次の行をパターンスペースに追加
$!ba最終行でなければラベルaへ戻る
s/\n/ /g改行をスペースに置換

処理の流れ

  1. :aでループ開始位置を定義
  2. Nで次行をパターンスペースに追加
  3. $!baで全行を1つにまとめる
  4. 最後に改行をスペースへ置換

なぜこの方法が必要か

通常、sedは1行ずつ処理します。そのため改行を対象にするには、全行をパターンスペースに読み込む必要があります。

パターンスペースとホールドスペース

  • パターンスペース:現在処理中のデータ領域
  • ホールドスペース:一時保存用

今回の処理はパターンスペースのみを使用しています。

trコマンドで改行をスペースに変換する方法

同じ処理はtrコマンドでも可能です。

tr '\n' ' ' < input.txt

シンプルですが、複雑な制御はsedの方が得意です。

sedで末尾に改行を追加するコマンドの仕組み

sed '$a\ \ ' input.txt
要素説明
$最終行
a行の後に追加
\改行エスケープ
空行実際の改行

sedでファイルへ直接書き込む方法

sed -i '' '1i\ \ ' input.txt

BSD版では-i ''を指定する必要があります。

sedで特定の文字を改行に置換する方法

例えばカンマを改行に変換する場合です。

sed 's/,/\n/g' input.txt

改行はバックスラッシュ+nで表現します。

逆引きで理解するsed改行操作

例1:先頭に改行を追加

cat << 'EOF' > sample1.txt a b EOF
sed '1i\ \ ' sample1.txt

例2:改行を削除して1行にする

cat << 'EOF' > sample2.txt a b EOF
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' sample2.txt

例3:カンマを改行に変換

cat << 'EOF' > sample3.txt a,b,c EOF
sed 's/,/\n/g' sample3.txt

よくあるsed改行処理の失敗パターン

1:バックスラッシュの後に改行を書かない

sed '1i\' input.txt

→ input.txtの内容がそのまま表示されます

2:BSDで-iオプションを誤る

sed -i '1i\ \ ' input.txt

→ -iの後に'(シングルクオーテーション)が2つ必要

3:改行を直接\nで書く

sed '1i\n' input.txt

→ エラーになります

sedと改行操作の理解を深めるまとめ

sedで改行を扱うには、「行単位処理」という前提を理解することが重要です。特にBSD版では、改行の書き方に独自のルールがあるため注意が必要です。

改行の挿入・削除・置換を使いこなせれば、ログ加工やデータ整形の効率が大きく向上します。まずは基本のコマンドから試し、少しずつ応用へ広げていくのがおすすめです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands