このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:区切り文字の変更:sedコマンド
区切り文字の変更:sedコマンド
sed
コマンドは、テキスト処理において非常に強力なツールであり、特に文字列の置換に頻繁に使用されます。ここでは、sed
コマンドでの区切り文字の変更方法について解説します。これは、置換パターンや置換後の文字列に区切り文字が含まれる場合に非常に有用です。
sedコマンドの概要
sed
(Stream Editor)は、非対話型のテキストストリームエディタです。ファイルを直接編集することなく、テキストデータを一括で処理し、結果を標準出力に表示します。
【書式】sed [オプション] '<スクリプト>' <対象ファイル>
[オプション]
:sed
コマンドの動作を変更するオプション。'<スクリプト>'
:実行する編集コマンド。シングルクォートで囲みます。<対象ファイル>
:編集対象となるファイル名。
サンプルファイルの作成
まず、sed
コマンドの動作を確認するためのサンプルファイルを作成します。
user01@ubuntu:~$ nano sample.txt
sample.txt
の内容
Cl
Col
Cool
Coool
CoolCool
CoolCoolCool
CoolCoolCoolCool
Coool!
Cooool!!
Coooool!!!
Japan Cool
Japan Hot
America Cool
America Hot
区切り文字の変更
sed
コマンドのs
コマンドを使用して文字列の置換を行う際、デフォルトでは区切り文字としてスラッシュ(/
)が使用されます。しかし、置換パターンや置換後の文字列にスラッシュが含まれる場合、エスケープシーケンスを使う必要があり、読みづらくなります。
スラッシュを含む置換
たとえば、「Cool」を「/Cool/」に置換したい場合、通常は次のようにエスケープシーケンスを使用します。
コマンド例
user01@ubuntu:~$ sed 's/Cool/\/Cool\//g' sample.txt
出力結果
Cl
Col
/Cool/
Coool
/Cool//Cool/
/Cool//Cool//Cool/
/Cool//Cool//Cool//Cool/
Coool!
Cooool!!
Coooool!!!
Japan /Cool/
Japan Hot
America /Cool/
America Hot
解説
- s/Cool/\/Cool\//g:置換後の文字列である
/Cool/
のスラッシュを \/ とエスケープしています。 - エスケープが多く、スクリプトが読みづらくなっています。
区切り文字を変更して簡潔に書く
sed
コマンドでは、s
コマンドの後に続く文字が区切り文字として認識されます。そのため、スラッシュ以外の文字を区切り文字として使用することで、エスケープを減らし、スクリプトを読みやすくできます。
区切り文字をコロン(:
)に変更した例
user01@ubuntu:~$ sed 's:Cool:/Cool/:g' sample.txt
出力結果
Cl
Col
/Cool/
Coool
/Cool//Cool/
/Cool//Cool//Cool/
/Cool//Cool//Cool//Cool/
Coool!
Cooool!!
Coooool!!!
Japan /Cool/
Japan Hot
America /Cool/
America Hot
解説
- 区切り文字を
:
に変更することで、置換後の文字列に含まれるスラッシュをエスケープする必要がなくなりました。 s:Cool:/Cool/:g
:s
コマンドの区切り文字を:
にしています。
他の区切り文字の例
区切り文字には任意の文字を使用できます。慣習的によく使用される区切り文字の例を以下に示します。
区切り文字 | 使用例 | 説明 |
---|---|---|
スラッシュ / | s/Cool/Hot/g | デフォルトの区切り文字 |
コロン : | s:Cool:Hot:g | スラッシュを含む場合に便利 |
バーティカルバー | | s|Cool|Hot|g | パイプ記号を区切り文字に使用 |
シャープ # | s#Cool#Hot#g | 見やすさを重視する場合に使用 |
エクスクラメーション ! | s!Cool!Hot!g | 見やすさとタイプのしやすさを重視 |
注意点
- 区切り文字として使用する文字は、置換パターンや置換後の文字列に含まれない文字を選ぶとエスケープが不要になります。
- 区切り文字を変更することで、スクリプトの可読性と保守性が向上します。
例:区切り文字をエクスクラメーション(!
)に変更
user01@ubuntu:~$ sed 's!Cool!/Cool/!g' sample.txt
出力結果
Cl
Col
/Cool/
Coool
/Cool//Cool/
/Cool//Cool//Cool/
/Cool//Cool//Cool//Cool/
Coool!
Cooool!!
Coooool!!!
Japan /Cool/
Japan Hot
America /Cool/
America Hot
解説
- 区切り文字を
!
に変更しています。 - エスケープシーケンスが不要になり、スクリプトがシンプルになります。
不要なファイルを削除
作業が完了したら、サンプルファイルを削除します。
user01@ubuntu:~$ rm sample.txt
まとめ
- 区切り文字は任意の文字に変更可能であり、置換パターンや置換後の文字列に含まれない文字を選ぶことで、エスケープシーケンスを減らすことができます。
- スラッシュ(
/
)以外の区切り文字として、コロン(:
)、バーティカルバー(|
)、シャープ(#
)、エクスクラメーション(!
)などがよく使われます。 - 可読性の向上:区切り文字を適切に選択することで、
sed
スクリプトの可読性と保守性が向上します。
sed
コマンドを活用し、効率的なテキスト処理を実現しましょう。