sedに関する世界観です。
正規表現で検索や置換を行ったり、パターンにマッチする行だけを抜き出したい・削除したいなど、ストリームの編集を行いたい時は、sedを使う。
コマンド行に変換してbashに送る、などといった荒業も可能だ。
(以下は【 sed 】コマンド(基礎編その4)――文字列を置き換える/置換した行を出力する:Linux基本コマンドTips(56) - @ITを参考に執筆しました。)
基本的にsコマンドを使って文字を置換することが多い。s/old/new/という記法となる。また-nはコマンドによる出力以外を出力しない。pは結果を出力する(-nをつけた場合、pをつけないと何も出力されなくなる。)
コマンド | 解説 |
---|---|
sed s/Linux/FreeBSD/ | sは文字列の置換を行う。 |
sed -n s/Linux/FreeBSD/p | -nでデフォルトの内容を出力せず、 pで置換した行だけを出力する。 |
sed -n s/Linux/FreeBSD/pg | gは行に含まれる全てのパターンを置換する。 |
sed -n 20,50s/Linux/FreeBSD/p | sオプションでは、sの前にアドレスシンボルとして 行番号(たとえば20,50で20~50行目)か、/パターン/を 指定することで、その行だけを対象にできる。 たとえば、あるパターンを含む行において、別のパターンの置換を行える。 |
sed -n /Linux/s/FreeBSD/OpenBSD/p | 「Linux」というパターンが含まれる行の「FreeBSD」を「OpenBSD」に置換し、 置換した行だけを出力する。 |
他には、行を削除するdコマンドや、UNIXやPerlでよく使われるtrコマンドで置換する(たとえばa-zをA-Zにする)のと同等のyコマンドなどがあります。
オプションとしては、ストリーム操作して置換した内容をファイルに直接上書きする-iや、コマンドで出力された以外の一切の出力をしない-n、コマンドに追加するためのスクリプトを直接指定する-e、スクリプトのファイルを指定する-f、拡張正規表現を使う-rがよく使われます。
sedは、使いこなすことでめちゃくちゃ色んなことができます。正規表現と単純なコマンドが威力を発揮します。テキストエディタで手動でテキストを編集する前に、「そのやりたいことがsedでできないか?」を検討するといいでしょう。複数ファイルを編集するならfindやxargsを使うことができます。
sedを使ってファイル名を一括で変更する応用テクニック(lsの出力結果をsedでmvのコマンド行に変換してbashに渡す)については以下を参照してください。
Bashも参照のこと。
2024.05.23編集
viは入力されたデータをそのまま出力するためビジュアルエディタと呼ばれる。sedは入力されたデータを行単位で処理するためストリームエディタと呼ばれる。
sedはコマンドで使うと強力だが、テキストを編集する際にはviを使おう。とても便利で簡単にテキスト処理ができる。sedとviを制するものはLinuxを制す。
viも参照のこと。
grepやsedで使う正規表現については正規表現を参照のこと。
以下の書籍が参考になります。