はじめに
今回は、文字列置換や抽出に利用されるLinuxのsedコマンドについて実際に使いながら理解していきます。
実際にテキストファイルを編集しながら使い方を確認していきましょう!
sedコマンドとは
sedとはstream editorの略称で、指定したファイルをコマンドに従って処理することができます。
入力を行単位で読み取り、sedスクリプトと呼ばれるシンプルな命令文に従ってテキスト変換などの編集をおこない、行単位で出力します。
参照:sed ウィキペディア(Wikipedia)
基本の使い方
基本的な構文は以下になります。
$ sed [オプション] コマンド 入力ファイル
1. 基本の文字列置換
ここからは実践としてsample.txtを用意して文字列の置換を行っていきます。
sample.txtの中身は以下のようになっています。(catコマンドで確認します。)
$ cat sample.txt hello 0000 aaaa hello 1111 hello2222 3333hello bbbbcccc
1-1. 行で最初にマッチした部分を置換
小文字のhelloを大文字のHELLOに置換します。
$ sed -e 's/hello/HELLO/' sample.txt
HELLO 0000 aaaa HELLO 1111 hello2222 3333HELLO bbbbccc
1-2. マッチした全ての部分を置換
gを付けることで全てのhelloをHELLOに置換します。
$ sed -e 's/hello/HELLO/g' sample.txt
HELLO 0000 aaaa HELLO 1111 HELLO2222 3333HELLO bbbbcccc
1-3. ファイルの中身を書き換えて保存(上書き保存)
デフォルトの出力先は標準出力ですが、-i オプションでファイルを直接編集することができます。
$ sed -i -e 's/hello/HELLO/g' sample.txt
直接ファイルを編集することができました!
2. 基本の文字列挿入・削除
つづいて基本の文字列挿入・削除を行っていきます。
以下のようなテキストファイルを用意してまずは指定した行の前後に文字列挿入してみましょう。
$ cat sample_02.txt HELLO 1111 2222 3333 bbbb cccc |
i 指定位置の前に挿入する
a 指定位置の後ろに挿入する
2-1. 2行目にWorldという文字列を挿入
$ sed -e "2i World" sample_02.txt
2-2. bbbbという文字列がある前の行にaaaaを挿入
$ sed -e "/bbbb/i aaaa" sample_02.txt
2-3. ccccという文字列がある後ろの行にddddを挿入
$ sed -e "/cccc/a dddd" sample_02.txt

文字列の挿入ができたので、今度は文字列の削除をしてみましょう!
2-4. 1行目を削除
$ sed -e "1d" sample_02.txt
2-5. 1111の文字列が含まれている行を削除
$ sed -e "/1111/d" sample_02.txt
2-6. 複数行をまとめて削除
2~4行目を削除します。
$ sed -e "2,4d" sample_02.txt
便利な使い方
最後に便利な使い方・よく使う使い方を紹介します。目的に応じてぜひ活用してみてください。
# コメント行("#"で始まる行)を削除
$ sed '/^#/d' sample_03.txt
# 空行を削除
$ sed '/^$/d' sample_03.txt
# 空白を削除
$ sed 's/ //g' sample_03.txt
# 同一ディレクトリ内の複数ファイルを 文字列置換
# 拡張子.txtのファイルを対象
$ find . -type f -name "*.txt" | xargs sed -i s/aaaa/ABCD/
findコマンド と xargsコマンド と組み合わせて使うことで複数ファイルをまとめて操作しています。
まとめ
今回は、sedを使ってファイルの文字列を操作してみました。テキストファイルの編集をしたい時に手作業ででは大変な場合もあります。そんな時はsedコマンドを使ったほうが正確に効率よく編集できるのでぜひ試してみてください!!