ファイルや文字列を処理していて「改行を置換したい」というケースはよくあります。
しかし、単純に \n
を書いても期待通りに動かないことが多いです。
この記事では、sedで改行を置換する際の注意点と解決方法を解説します。
目次
1. sedは1行単位で処理している
sedの基本動作は「1行を読み込んで処理し、出力する」という流れです。
つまり、行末の改行文字は パターンスペースに含まれない ため、単純に \n
と書いてもマッチしません。
echo "foo
bar" | sed 's/\n/ /g'
→ 置換されずにそのまま出力されてしまいます。
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環境であればこちらを使うのが便利です。
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 環境でテキスト処理を行う際に非常に便利なコマンドですが、オプションや正規表現の違い、環境依存の仕様によって多くのエラーが発生します。初心者はもち…