ファイルや文字列を処理していて「改行を置換したい」というケースはよくあります。
しかし、単純に \n を書いても期待通りに動かないことが多いです。
この記事では、sedで改行を置換する際の注意点と解決方法を解説します。
📌 Linuxトラブルを体系的に切り分けたい方へ
本記事はLinux障害の一症状を解説しています。症状別の切り分け手順はこちらにまとめています。
▶ Linuxトラブルシューティングまとめガイド
目次
1. sedは1行単位で処理している
sedの基本動作は「1行を読み込んで処理し、出力する」という流れです。
つまり、行末の改行文字は パターンスペースに含まれない ため、単純に \n と書いてもマッチしません。
echo "foo
bar" | sed 's/\n/ /g'
→ 置換されずにそのまま出力されてしまいます。
あわせて読みたい


sed で正規表現が効かない/一致しないときのチェックポイント
はじめに Linuxで sed を使ってテキストを置換するとき、正規表現が効かない/一致しない というトラブルはよくあります。 例: $ echo “hello123” | sed ‘s/[0-9]+…
2. 方法①:N コマンドで改行を取り込む
N を使うと次の行を読み込み、パターンスペースに改行ごと結合できます。
echo "foo
bar" | sed ':a;N;$!ba;s/\n/ /g'
→ 出力:
foo bar
この書き方は 「全体を1つの文字列として扱いたい」 場合に有効です。
3. 方法②:-z オプションを使う(GNU sed限定)
GNU sedには -z オプションがあり、入力を「NULL文字区切り」として扱います。
これにより、ファイル全体をひとつの文字列として処理でき、改行も普通に \n で扱えます。
echo "foo
bar" | sed -z 's/\n/ /g'
→ 出力:
foo bar
シンプルで直感的に書けるため、Linux環境であればこちらを使うのが便利です。
あわせて読みたい


sedで大きなファイルを処理すると遅い/メモリエラーになる場合
sedはログ解析やテキスト整形に便利なツールですが、数百MB〜数GBクラスの大きなファイルを処理すると、急に遅くなったり、メモリエラーが発生することがあります。 こ…
4. 方法③:OSごとの改行コードに注意(LFとCRLF)
- Linux/Unix系 → 改行コードは
LF (\n) - Windows → 改行コードは
CRLF (\r\n)
Windows由来のファイルを処理すると、s/\n/ /g では置換できないケースがあります。
その場合は \r\n を対象にしましょう。
# Windowsの改行コード対応
sed -z 's/\r\n/ /g' file.txt
5. まとめ
- sedは1行単位処理なので、改行は普通に扱えない
Nコマンド+ループで改行を含める方法がある- GNU sedなら
-zオプションがシンプルでおすすめ - Windows由来のファイルは改行コード(CRLF)に注意
あわせて読みたい


【コマンド詳細】sedコマンドの使い方とオプションまとめ
sed コマンドとは? sed (Stream Editor) は、LinuxやUNIXシステムで使われるストリーム形式のテキストエディタです。ファイルを直接開くことなく、以下のようなテキス…
よくあるエラーと解決方法まとめ
あわせて読みたい


【完全版】sedエラー大全|よくある原因と解決方法まとめ
sed は Linux 環境でテキスト処理を行う際に非常に便利なコマンドですが、オプションや正規表現の違い、環境依存の仕様によって多くのエラーが発生します。初心者はもち…
