#author("2026-06-18T20:22:25+09:00","","")
#author("2026-06-18T20:25:35+09:00","","")
#navi(../)
* sedコマンドで改行のみの行を削除する [#ee394ac1]

sedコマンドを利用し、改行のみの行を削除する方法を以下に記します。

''■目次''
#contents

#htmlinsert(linux_ads_top.html)

* 概要 [#h55b7337]
本記事では、Linuxの「sed」コマンドを使用して、テキストファイル内にある**改行のみの行(空行)を削除する方法**を解説します。
最もシンプルな基本構文は以下の通りです。

  sed '/^$/d' 対象ファイル > 出力ファイル

※「スペースやタブが入っている行も一緒に消したい」という場合は、[[関連記事>#kdcddc11]]を参考にしてください。

* 関連記事 [#kdcddc11]
-[[スペースのみの行および改行のみの行を削除する>逆引きUNIXコマンド/スペースのみの行および改行のみの行を削除する]]
-[[sedでディレクトリ文字列が格納されている変数を展開して置換する>逆引きUNIXコマンド/sedでディレクトリ文字列が格納されている変数を展開して置換する]]
-[[sedで指定した行を削除する方法>逆引きUNIXコマンド/sedで指定した行を削除する方法]]
-[[sedを使ってスペースの文字列操作を行う>逆引きUNIXコマンド/sedを使ってスペースの文字列操作を行う]]
-[[sedを使って改行のみ、スペースのみの行を削除する>逆引きUNIXコマンド/sedを使って改行のみ、スペースのみの行を削除する]]
-[[sedコマンドで大文字小文字を区別せずに置換する方法>逆引きUNIXコマンド/sedコマンドで大文字小文字を区別せずに置換する方法]]
-[[キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド>逆引きUNIXコマンド/キーワードからキーワードまでの文字列を抜き出す方法・sedコマンド]]
-[[指定した範囲の行を取得する方法>逆引きUNIXコマンド/指定した範囲の行を取得する方法]]
-[[改行のみの行を削除する>逆引きUNIXコマンド/改行のみの行を削除する]]


* sedコマンドの構文 [#ca3f369e]
sedコマンドを利用して改行のみの行を削除する時は、以下の構文になります。~
「^$」は、行頭(^)と行末($)の間に文字がない状態(=空行)を表し、「d」は削除(delete)を意味します。

 sed '/^$/d' 対象ファイル > 出力ファイル
または
 cat 対象ファイル | sed '/^$/d' > 出力ファイル

実際に上記の構文を試した結果を以下に記します。


* sedコマンドで改行のみの行を削除してみる [#t511601a]
以下のサンプルファイル(sakura.txt)から、改行のみの行を削除してみます。

 $ cat -n sakura.txt
      1  hokkaido
      2  aomori
      3  
      4  iwate
      5  akita
      6  yamagata
      7  
      8  
      9  
     10  fukushima
     11  miyagi

** 標準出力に結果を出力 [#w39c1483]
ファイルを上書き・保存せず、画面(標準出力)に結果を表示したときの実行結果です。

 $ sed '/^$/d' sakura.txt
 hokkaido
 aomori
 iwate
 akita
 yamagata
 fukushima
 miyagi

** ファイルに結果を出力(保存)してみる [#oad1695f]
catコマンドの出力をパイプでsedコマンドに渡し、リダイレクト(`>`)を使って「sakura2.txt」に空行を削除した結果を保存します。

 $ cat sakura.txt | sed '/^$/d' > sakura2.txt

 保存されたファイルの中身を確認すると、改行のみの行が綺麗に削除されていることが分かります。
 $ cat -n sakura2.txt
      1  hokkaido
      2  aomori
      3  iwate
      4  akita
      5  yamagata
      6  fukushima
      7  miyagi


* 最後に [#l92ec794]
以上、sedコマンドを使った改行のみの行(空行)の削除方法でした。

今回紹介した sed '/^$/d' は、**「文字が何も入力されていない完全に空の行」**を対象としています。
もし「見た目は空行なのに削除されない」という場合は、目に見えないスペースやタブ、またはWindows特有の改行コード(CRLF)が含まれている可能性があります。~
その場合は、正規表現を '/^[[:space:]]*$/d' などに変更するか、関連記事の「スペースのみの行を削除する」方法を試してみてください。
その場合は、正規表現を '/^[[:space:]]*$/d' などに変更するか、関連記事の「スペースのみの行を削除する」方法を試してみてください。

ログファイルの整理やスクリプトでのテキスト処理にぜひ役立ててください。

#htmlinsert(linux_ads_btm.html)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS