sed - テキスト・文字列を操作するコマンド
指定した文字列(文字パターン)がファイル内に存在した場合、置換文字で置換を行なう
■よく使う形(例)
※file.txtファイルの中から、aaaaという文字を見つけ出し、それらをすべてbbbbという文字列に置換する。
# sed -e s/aaaa/bbbb/g file.txt
※httpd.confのコメント部分(行頭が#)を削除して、定義を見やすくする。
# sed /^#/d httpd.conft
※httpd.confの空行部分(なにも書いていない行)を削除して、httpd.confORGファイルに出力する。
# sed /^$/d httpd.conf > httpd.confORG
1042949指定した文字列(文字パターン)を検索し、合致すれば置換文字列に入れ替える。
grepコマンドとよく似た使い方(正規表現やオプション指定等)ができます。
いろいろ何でもできてしまうsedコマンドですが、正規表現を工夫するとかなり多くのことが1コマンドでできてしまいます。
例えば
「Webのアクセスlogから、アクセスされたページのURLのみ抽出したい」とすると
# sed 's/.*GET \/\(.*\.html\).*/http:\/\/www\.seadigit\.net\/\1/' access_log
と入力することで、日付やステータスなど、必要のない情報を捨てながら、ドメインを付加したアクセスページリストを作ることができます。
[変換前のデータ]
221.95.88.49 - - [23/Jul/2006:15:07:58 +0900] "GET /LINUX/index.html HTTP/1.1" 304 -
[変換後のデータ]
http://www.seadigit.net/LINUX/index.html
区切り文字である「/」や、制御文字の「.」が含まれるため、エスケープ文字「\」で見づらくなっていますが、正規表現がわかるとなんでもありませんよね。
■主なオプション
オプション | 機能説明 |
---|---|
-n | 文字列(または文字列パターン)に合致した行と行番号を表示する。 |
-v | 文字列(または文字列パターン)に合致しない行を表示する。 |
-i | 大文字小文字の区別をしないで検索。 |
-f | ファイルから検索パターンを読み込んで検索する。 |