【Linux】sedコマンドの基本的な使い方をまとめてみました
sedコマンドの基本的なコマンド説明&例を、実行結果と一緒にできる限りわかりやすくまとめてみました。
sedコマンドについて
文字列の置換や抽出、削除など多くのテキスト処理ができるコマンドです。
ちなみにsedは「Stream EDitor」の略です。
sedコマンドについては、Linux(GNU系)かmacOS(BSD系)かで処理が変わってくるので、その内容についても触れながら紹介していきます。
参照ファイルの準備
まずは、参照元のテキストファイルを作成します。
// test.txt
AAAA AAAA
BBBB BBBB
CCCC CCCC
DDDD DDDD
AAAA AAAA
続いてsedコマンドを記述していきます。
出力処理
出力結果の行数を指定して表示
eオプションはsedの第一引数(下記コードの[指定行1],[指定行2]p)がコマンド、第二引数以降(下記コードの[ファイル名])は入力ファイルと指定するものです。
eオプションを省略した場合にも、第一引数がコマンド、第二引数以降は入力ファイルと処理するため、省略も可能です。
※当コマンド以降、全てeオプションを省略しています。
nオプションは指定しなかった余分な行の文字列を表示しないようにするものです。
// sed -e -n [指定行1],[指定行2]p [ファイル名]
sed -e -n 2,3p test.txt
実行結果
test.txtの2~3行までの内容を表示します。
BBBB BBBB
CCCC CCCC
特定の行を消して表示
// sed [削除する行]d [ファイル名]
sed 1d test.txt
実行結果
1番目の行を削除して表示します。
BBBB BBBB
CCCC CCCC
DDDD DDDD
AAAA AAAA
ファイル内にある対象の文字列を他の文字列に置換する
sは正規表現で置換処理をするという意味になります。
// sed 's/[対象文字列]/[置き換える文字列]/' [ファイル名]
sed 's/AAAA/ZZZZ/' test.txt
実行結果
AAAAがZZZZに置換されます。
ただし実行結果の通り、各行でマッチした対象文字列の1つ目のみにしか置換をしません。
ちなみに実行しても置換されたデータが表示されるだけで、ファイルデータは変わりません。
ZZZZ AAAA
BBBB BBBB
CCCC CCCC
DDDD DDDD
ZZZZ AAAA
ファイル内にある対象の文字列全てを他の文字列に置換する
もし、各行でマッチした対象文字列 全てに対して置換をしたい場合には先ほどのコードにgコマンドを使用すれば可能です。
※ gの後にスラッシュは不要なので注意が必要です。
// sed 's/[対象文字列]/[置き換える文字列]/g' [ファイル名]
sed 's/AAAA/ZZZZ/g' test.txt
実行結果
ZZZZ ZZZZ
BBBB BBBB
CCCC CCCC
DDDD DDDD
ZZZZ ZZZZ
各行のn番目の対象文字列に対してのみ他の文字列に置換する
// sed 's/[対象文字列]/[置き換える文字列]/[n]' [ファイル名]
sed 's/AAAA/ZZZZ/2' test.txt
実行結果
AAAA ZZZZ
BBBB BBBB
CCCC CCCC
DDDD DDDD
AAAA ZZZZ
行番号を指定して対象の文字列を他の文字列に置換する
// sed '[行番号1],[行番号2]s/[対象文字列]/[置き換える文字列]/' [ファイル名]
sed '2,5s/AAAA/ZZZZ/' test.txt
実行結果
AAAA AAAA
BBBB BBBB
CCCC CCCC
DDDD DDDD
ZZZZ AAAA
ファイルの上書き処理
上記では置換したデータを表示するだけですが、今度は実際にファイルを上書きしてみましょう。
ファイルに変更を加える場合には、iオプションを使用します。
下記のコマンドはLinux(GNU系)のsedとmacOS(BSD系)のsedではコマンドに差異があるため、ご使用のOS(sed)に応じてご使用ください。
詳しくは下記の記事をご覧ください。
【Linux】MacOSのsedコマンドでエラーが発生した時の対処法
出力結果の行数を指定して上書き
Linux(GNU系)
// sed -i 's/[対象文字列]/[置き換える文字列]/g' [ファイル名]
sed -i 's/AAAA/ZZZZ/g' test.txt
macOS(BSD系)
// sed -i '' 's/[対象文字列]/[置き換える文字列]/g' [ファイル名]
sed -i '' 's/AAAA/ZZZZ/g' test.txt
実行後のファイル
ZZZZ ZZZZ
BBBB BBBB
CCCC CCCC
DDDD DDDD
ZZZZ ZZZZ
ファイル内にある空白を削除して上書き
Linux(GNU系)
// sed -i 's/[スペース]//g' [ファイル名]
sed -i 's/ //g' test.txt
macOS(BSD系)
// sed -i '' 's/[スペース]//g' [ファイル名]
sed -i '' 's/ //g' test.txt
実行後のファイル
AAAAAAAA
BBBBBBBB
CCCCCCCC
DDDDDDDD
AAAAAAAA
ファイルの中身を全て削除
Linux(GNU系)
// sed -i 'd' [ファイル名]
sed -i 'd' test.txt
macOS(BSD系)
// sed -i '' 'd' [ファイル名]
sed -i '' 'd' test.txt
実行後のファイル
おわりに
いかがだったでしょうか。
数多くあるLinuxコマンドの中でも、使われることの多いsedコマンド。
他にもawkなどの便利なコマンドがたくさんあるので、興味のある方はぜひ調べてみてください!
最後までご覧いただき、ありがとうございました。