支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • 【Linux】文字列置換で利用できる

【Linux】文字列置換で利用できるsedコマンドの使い方

Linuxにおける「sed」は「Stream Editor」という英語の略であり、指定したファイルや文字列をコマンドに従って処理し、標準出力へ出力します。基本的にファイルを指定して操作するのですが、省略した場合は、標準入力の文字列を処理します。sedコマンドでは、パイプやリダイレクトを使用することもできます。

「sed」コマンドの使い方

「sed」コマンドの構文は以下の通りです。


sed [オプション] スクリプトコマンド 入力先ファイル

スクリプト

今回使用する「sed」コマンドでは、「スクリプト」を記述する必要があります。「スクリプト」とは正確 には「シェルスクリプト」のことを指しています。ですので、まずは「シェル」とは何かということを知っていきましょう。

シェルとカーネル

「シェル」とは、ユーザーのコマンドや操作を受け付け、動作し結果を出力するプログラムです。Linuxにおいて端末画面にコマンドを打ち込み、その結果が表示されるのは、「シェル」のお陰であると言えます。シェルは、ユーザーによって端末に入力されたコマンドを解釈し、「カーネル」のプログラムを呼び出します。そして、「カーネル」とは、Linuxの基幹となるプログラムであり、OSのリソースを管理しています。そして、カーネルはハードウェアとソフトウェアを仲介するものであるのです。このカーネルが出力した処理結果をシェルに渡し、ユーザーがわかるように解釈して画面に表示するのです。シェルにはいくつかの種類がありますが、最も広く利用されているのものの一つが、「bash(Bourne Againシェル)」です。bashは、「sh(Bourneシェル)」という最も基本的なシェルをベースに開発されました。

シェルスクリプト

シェルスクリプトとは、シェルによって読み込まれ、実行される一連の処理を記述したスクリプトのことです。「スクリプト」は英語で「script」と書き「台本」という意味を持っています。この台本のテキストデータがシェルスクリプトです。シェルスクリプトはコマンド・インタプリタとも呼ばれています。「インタープリター」は英語で「interpreter」と書き、「通訳者」という意味です。

文字列の置き替え

「sed」コマンドではスクリプトを記述して、文字列の置換を行うことが出来ます。


sed s/abc/ABC/ ファイル名

「sed」コマンドの後の「s」は「substitute」、「代替」という意味の英語の頭文字となっています。これで、ファイルのテキストの「abc」を大文字の「ABC」に置き換えることが出来ます。しかし、この書き方ではファイルの中のテキストの各行で一度しか適応されません。


abcabcabc
abcefg
↓
ABCabcabc
ABCefg

という置換が行われることになります。ですので、


sed s/abc/ABC/g  ファイル名

スクリプトの最後に「g」を書き加えることで、各行の置換対象の文字列が全て置換されるようになります。また、スクリプトの初めに数字を記述すると行を指定することもできます。


# 5行目のみを全置換の対象とする
# gを付けているのでその行に複数マッチすれば全部置換される
sed 5s/abc/ABC/g

# 2行目から6行目のみを全置換の対象とする
sed 2,6s/abc/ABC/g

# 3行目から5行目のみを全置換の対象にする
$ sed '3,$s/abc/ABC/g'

行の削除

「sed」コマンドの後に「d」と記述することで、行を削除することができます。この時に行の指定を行わない場合、全ての行を削除してしまうので注意が必要です。


sed 1,5d

置換を行う時と同じようにスクリプトの前に行の指定を行う必要があります。また「1,5!d」などと記述すると、対象の行以外の削除を行います。

指定した行を標準出力する

「p」というスクリプトを記述すると、対象の行の出力を行うことができます。基本的には「sed」コマンドでは出力を行うのですが、全ての行の出力を行うのですが、通常は「-n」という出力を行わないオプションをつけておき、「p」のスクリプトを必要に応じて記述していく、という操作を行います。例えば、「ls」コマンドと合わせて、


ls -l | sed -n 2,4p

「|」はパイプと言って、コマンドの操作を「標準入力」として次のコマンド操作の対象にすることができます。 この場合、「ls -l」でファイルの一覧を表示し、その表示結果の2行目から4行目を「sed」コマンドで出力することができます。

まとめ

今回は「sed」コマンドの基本について紹介しました。まだまだ「sed」コマンドにはいろいろな使い方ができるのですが、今回はスクリプトについて、そして基本となる「置換」と「行の削除」に削除について理解をしておきましょう。