【Linuxコマンド】sedコマンドを理解する – テキストの置換や編集をする方法-

Linux

はじめに

今回は、文字列置換や抽出に利用される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
sample.txtの各行でhelloと最初にマッチした部分のみが置換されるので2行目の2つ目のhelloはそのままになっています。

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. 基本の文字列挿入・削除

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行目を削除

削除にはdコマンドを使用
$ 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コマンドを使ったほうが正確に効率よく編集できるのでぜひ試してみてください!!

タイトルとURLをコピーしました