sed スペース 空白文字の整理・空白行の削除

sed で、スペース・タブ、空行に関する処理をまとめました。これらは、フィールドやレコードのセパレータとして使われるので、使いこなせるようになるとデータ解析の前処理が楽になります。

スペース・タブ(空白文字)の処理

関連記事
sed コマンド 行指定の置換・削除(アドレッシング)
sed コマンド 置換・削除・アドレッシングまとめ
sed コマンド 削除(行番号とパターン)

複数のスペースを1つにする

1個以上のスペースは(space)(space)*で表現できます。間違いが多いのは、(space)*です。*は「直前の文字を0回以上繰り返し」という意味をもつので、この場合「任意」になってしまいます。

書式

sed -e 's/(space)(space)*/(space)/g'  
# (space)は' '

例 複数のスペースを1つに変換

複数のスペースを1つのスペースに置き替えます。

$ cat sed_space.dat
aaa bbb ccc      # (space)1個。
aaa  bbb ccc     # (space)2個・1個。
aaa   bbb   ccc  # (space)3個。
$ cat sed_space.dat | sed -e 's/  */ /g'
aaa bbb ccc
aaa bbb ccc
aaa bbb ccc

例 複数のスペースを1つに変換(指定間違い)

複数のスペースを1つのスペースに置き替えます。sed(space)*を指定すると、全ての文字の前にスペースが挿入されてしまいます。

$ cat sed_space.dat | sed -e 's/ */ /g' # s/(space)が1個
 a a a b b b c c c 
 a a a b b b c c c 
 a a a b b b c c c 

タブ・スペースの混在を1つのスペースにする

タブやスペースは混在することが多くて整形するのが面倒です。1回以上のタブ又はスペースの繰り返しは、[(space)(tab)][(space)(tab)]*で表現できます。(space)と(tab)の順序は関係ありません。端末(コンソール)でタブを直接入力するには、「Ctrlキー」を押しながら「v」・その後「Tabキー」を押します。

書式

sed -e 's/[(space)(tab)][(space)(tab)]*/(space)/g'  
# (space)は' ' (tab)は'    '

例 タブまたはスペースが混在をスペースを1つに変換

複数のスペースを1つのスペースに置き替えます。

$ cat sed_space2.dat 
aaa bbb ccc                  # スペース
aaa	 bbb ccc             # スペース・タブ
aaa		bbb 	ccc  # スペース・タブ混在
$ cat sed_space2.dat | sed -e 's/[         ][      ]*/ /g' 
# []内は(space)(tab)
aaa bbb ccc
aaa bbb ccc
aaa bbb ccc

行末のスペースを削除

行末に不要なスペースが残っていると連結処理などで地味に邪魔になることがあります。行末は$で表現します。「$」直前の空白文字を削除「//」します。

書式

sed -e 's/[(space)(tab)]*$//'  
# (space)は' ' (tab)は'    '

例 行末のスペース・タブを削除

行末のスペース・タブを削除します。

$ cat sed_space3.dat
aaa bbb ccc     # スペース・タブ混在
aaa bbb ccc  	# スペース・タブ混在
aaa bbb ccc	# スペース・タブ混在
$ cat sed_space3.dat | sed 's/[    ]*$//' > sed_space4.dat
# []内は(space)(tab)。結果は、sed_space4.datをエディタで確認。

オススメ記事
正規表現 メタキャラクタ 検索・置換 前編
正規表現 メタキャラクタ 検索・置換 後編
awk 複数行の処理

空行・1行目・最終行の削除

sedを使った空白行の処理です。

空白行を削除

空白行にレコードの区切りなど意味があるときもありますが、無駄な空白行はとても邪魔です。空白行は、/^$/で指定して、sedのdコマンドで削除します。

例 行末のスペース・タブを削除

不要な空白行を削除します。

$ cat sed_space5.dat
aaa bbb ccc


aaa bbb ccc

aaa bbb ccc
$ cat sed_space5.dat | sed -e '/^$/d'
aaa bbb ccc
aaa bbb ccc
aaa bbb ccc

1行目・最終行を削除

1行目は不要なヘッダーがあったり、最終行は単なる空白行だったり、1行目と最終行は削除することも多いです。sedのdコマンドで行番号を指定して削除すると簡単です。

例 1行目削除

1行目を削除します。

$ cat sed_space6.dat
1 aaa bbb ccc
2 aaa bbb ccc
3 aaa bbb ccc
$ cat sed_space6.dat | sed -e '1d'
2 aaa bbb ccc
3 aaa bbb ccc

例 最終行削除

最終行目を削除します。最終行の指定は$です。

$ cat sed_space6.dat
1 aaa bbb ccc
2 aaa bbb ccc
3 aaa bbb ccc
$ cat sed_space6.dat | sed -e '$d'
1 aaa bbb ccc
2 aaa bbb ccc



カテゴリー

今週よく読まれている記事

  1. 学会・会議で英語が絶望的にできなくて困るケース | オンライン開催で「英語力のなさ」を痛感した場合の対処法

    学会・会議で英語ができなくてに困るケース学会やイベント・会議などが、オンラインで開催される…
  2. r tidyverse 使い方 | 列 filter 絞り込み select関数 – dplyrパッケージ

    tidyverseで1つのデータフレームの列の絞り込みは、dplyrパッケージのselect関数を…
  3. プログラミングで疲れた脳をリフレッシュ 〜 鬼滅の刃「感動」と「やる気アップ」でストレス発散!

    ストレス発散は鬼滅で。「50%OFF」で読む!脳のパフォーマンスを上げるには、適度な休憩と…
  4. AWS ディスク容量不足 新しいボリュームを追加する

    バイオインフォマティクスでは大きなファイルを扱うことがあるので、ディスク不足に陥ることがあります。…
  5. 「知っている」と「知らない」とでは、もしものとき、大違いになる – コロナうつ対策

    コロナうつなどという言葉を聞くようになりましたが、派遣切り、解雇、リストラは、これから本格化します…

人気記事

  1. Excel, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. R言語

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  3. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…

おすすめ記事

  1. シェルスクリプト

    シェルスクリプト | ファイル存在チェック・空ファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  2. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  3. awk, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…