Linux|sedコマンドで文字列の置換する方法【正規表現も使える】

Linuxを勉強したい人向け シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】

今回は、sedについての解説記事です。

sedコマンドで文字列を置換したい人
「sedコマンドを使って、ファイル内の特定の文字列を置換したいです。どうすればできますか?具体的なオプションの指定、利用例、コピーして使える例も欲しいです。」

こんな悩みを解決します。

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事の内容

1.sedで文字列を単純置換する

構文はこれだけ覚えておけばOKです

sed -e “s/《置換対象文字列》/《置換後文字列》/g”

上の構文を使って、文字列「abc」を大文字:「ABC」に置換します

echo "abcabc" | sed -e 's/abc/ABC/g'                                                                   

実行結果は以下の通りです。

ABCABC

sedによる実践的な文字列置換の例

sedを用いて、yahoo!トップからダウンロードしたhtmlファイル(下図の左側)から画像へのリンクを非表示にしてみましょう(下図の右側)。

sedを用いた文字列置換の例

まずはダウンロードを行います。

curl -o y.html https://www.yahoo.co.jp

ダウンロードしたhtmlファイルのimgタグをsedを用いて非表示にします。

cat y.html | sed -e 's/ edit.html

たったこれだけです。

2.sedで1回限定で置換する

「g」なしで置換すると、最初にマッチした文字列だけを置換します。

sed -e “s/《置換対象文字列》/《置換後文字列》/”

文字列「abc」を一回だけ「XYZ」に置換します

echo "abcabc" | sed -e 's/abc/ABC/'

実行結果は以下の通りです。

ABCabc

3.sedで複数の置換ルールを適用する

置換は1回のコマンドで複数指定し、連続して行うこともできます。

sed -e “s/《置換対象文字列①》/《置換後文字列①》/”
 -e “s/《置換対象文字列②》/《置換後文字列②》/”

次の例では、「ab→AB」と「fg→FG」の2つの置換を行います

echo "abcdefg" | sed -e 's/ab/AB/' -e 's/fg/FG/'

実行結果は以下の通りです。

ABcdeFG

4.sedで正規表現を使って文字列を置換する

sedでは正規表現(正確にはワイルドカード)を使って置換する文字列を指定することができます。

文字列「ab」と「fg」をXXに置換します

echo abcdefg | sed -E 's/[ab|fg]/X/g'

実行結果は以下の通りです。

XXcdeXX
マッチ条件 記号
任意の1文字 .
Aの1回以上の繰り返し(A,AA,AAA,…) A+
Aの0回以上の繰り返し A*
AまたはB A|B
数字 [0-9]
数字以外の文字 [^0-9]
アルファベット/数字/アンダーバー [a-zA-Z_0-9]
アルファベット/数字/アンダーバー以外 [^a-zA-Z_0-9]
空白文字 [ \f\n\r\t]
空白文字以外 [^ \f\n\r\t]

5.【付録】そもそもsedとは

sed(Stream EDitor)は、入力ストリーム(ファイルまたはパイプラインからの入力)に対してテキスト変換などのデータ処理をおこなうために使用されるプログラムです(Wikipediaより)。

文字列の置換や削除、行単位で置換結果だけを抽出するなど、多様なテキスト処理を行うための汎用性の高いコマンドです。文字列の置換を行うときはsed、1文字の単純な置換を行うときはtrコマンドを使うと便利です。

参考

sedコマンド – 文字列を置き換える/置換した行を出力する(外部サイト)

今回は以上です。sedコマンドで文字列の置換する方法を解説しました。参考になりましたら幸いです。

Blog TOP  Linuxコマンドを勉強したい人向け|Linuxの使い方 記事まとめ

Linux&Linuxコマンドを勉強したい人向けの記事もくじ

用語解説・技術一般

  "UNIXとLINUX"の違いについて解説します
  CUIとGUIの違い・特徴について解説します

サーバリソースを確認するコマンドの使い方

  【Linux】CPU使用率を確認する3つの方法を解説します
  【Linux】topコマンドで,CPU消費の原因を特定する方法
  【Linux】ps実行時に-efオプションを付ける理由について
  【Linux】メモリ使用率を確認する|容量・空きの確認も
  【Linux】ディスク容量を確認する|ディスク容量監視も

ファイル操作に関するコマンドの使い方

  【Linux】ファイルの行数をカウントする方法を解説
  【Linux】文字コード変換ならiconvコマンド1択です
  【Linux】/dev/nullを、エンジニアが使う2つの目的
  【Linux】findのexecオプションの使い方とその注意点
  【Linux】findの結果から圧縮ファイルを作るコマンド
  【Linux】hostsの場所はどこ?→/etc/hostsにあります
  【Linux】touchコマンドで,時刻更新&空ファイル作成

Linux管理者用コマンドの使い方

  【Linux】再起動コマンド(shutdown)の使い方と注意点

よく使う便利なコマンドの使い方

  【Linux】改行なしでechoコマンドを使う時の -nオプション
  【Linux】sleepコマンドの使用例と注意点について解説する
  【Linux】rmコマンドでディレクトリを削除する方法を解説
  【Linux】ファイルを削除するコマンド2選【rm以外もあり】
  【Linux】awkの区切り文字を指定する,-Fオプションを解説
  【Linux】sedで文字列の置換をするeオプションを解説する
  【Linux】dateコマンドのフォーマットとその便利な使い方
  【Linux】大文字から小文字に変換する方法【小文字から大文字も】

シェルの便利機能

  【Linux】コマンド履歴を検索する【Ctrl+r】