![]() |
Guides, HowTos and Tips for Technology Geeks - The Geek Stuff |
Sasikala氏がThe Geek StuffにおいてUnix Sed Tutorial: Find and Replace Text Inside a File Using RegExのタイトルのもと、sedコマンドで置換を実施する場合の使い方とその例題をまとめている。sedはテキストファイルから特定の行を表示したり削除、または特定の文字列を置換する用途で用いられる。特に文字列の置換をおこなうためのツールとして活用されることが多い。
sedは便利なツールだが、置換の指定方法はマニュアルを読むだけではわかりにくいところがある。実例を通して身につける方法がわかりやすい。Unix Sed Tutorial: Find and Replace Text Inside a File Using RegExではいくつかの異なる例を挙げながら動作を紹介している。紹介されている利用例は次のとおり。
各行の最初に現れる「Linux」を「Linux-Unix」へ置き換える。
その行におけるすべての「Linux」を「Linux-Unix」へ置き換える。置換指定の最後に追加された「g」の指定が、すべての一致するものに対して置換を実施せよ、という命令になる。
その行において2つ目に現れる「Linux」を「Linux-Unix」へ置き換える。置換指定の最後に追加された「2」の指定が、2つ目に一致するものに対して置換を実施せよ、という命令になる。
その行におけるすべての「Linux」を「Linux-Unix」へ置き換える (g)。置き換えが実施された行は標準出力へ表示する (p)。さらに出力された結果を指定されたファイル(ここではoutputという名前のファイルが指定されている)へ書き込む (w)。この例では3つのフラグが指定されている。「g」は前述したようにすべての一致するものに適用するという命令で、「p」は変換が実施された行を標準出力へ出力する命令、「w」は指定されたファイルへ変換された行を書き込む命令。
その行において「-」があるところから行末までを削除する。「.」は任意の1文字、「*」は1つ前の文字の0回以上の繰り返しを意味する。
その行において行末から3文字文を削除する。「$」が行末を表現する。
その行において「#」から行末までを削除する。
その行において「#」から行末までを削除し、さらにその行そのものを削除している。「s/#.*//」と「/^$/d」の2つの命令が「;」で区切られてひとつにまとめられている。「^」は行頭を意味する。「/^$/d」は空行 (/^$/)を削除(d)するという意味になる。
DOSファイルの改行形式「\r\n」から「\r」を削除して「\n」のみにし、Unixで使いやすいものに変換する。
HTMLタグに一致する単語を削除する。「[A-Za-z\/]」が大文字小文字すべてのアルファベットとスラッシュを意味している。「/」が区切り文字として使われているため「\/」のようにエスケープして使っている。「\/」のようにバックスラッシュを先に書くと、その次の文字は通常の文字として扱われるようになる。なお、Unix Sed Tutorial: Find and Replace Text Inside a File Using RegExに掲載されている例は「's/]*>//g'」となっているが、これでは置換できない。掲載段階で編集を誤ったものとみられる。
区切り文字にはスラッシュ「/」が使われているが、使う文字が決まっているわけではない。「s」のあとに記載された文字が区切り文字として使われるため、パスを置換するなど「/」が区切り文字としてわかりにくい場合には「s,パターン,置換する文字列,g」のように使うこともできる。上記の例であればたとえばsed -e 's|<[A-Za-z/]*>||g'のように表記できる。「/」が区切り文字ではなくなるため、エスケープする必要がなくなっている。
| システムモニタリングツール、人気トップ5 [2009/9/7] |
| 2009ベストオープンソースソフトウェア40 - InfoWorld [2009/9/3] |
| Vimでスペルミスを自動修正する方法 [2009/3/16] |
| ViユーザーにオススメのTipsが満載! 「Vi / Vim Tips and Tricks」 [2009/3/10] |
| 超新星残骸中にないはずの多量の一酸化炭素 - 天文衛星「あかり」が発見 [21:42 2/9] |
| 【レポート】ROBO-ONE委員会 - 第20回大会でのROBO-ONE Lightの開催を決定 [20:27 2/9] |
| 火星に海の存在を示す有力な証拠が発見される - ESAが発表 [18:48 2/9] |
| iOS向けSPDYライブラリが登場、普及はじまるSPDY [11:57 2/9] |
| GitHubのアクティブプロジェクト、もっとも多いのはMITライセンス [11:42 2/9] |
|
[中井貴一]兵庫県知事「平清盛汚い」発言にユーモアで反撃 [07:00 2/10] エンタメ |
|
【連載】出社前に。日常生活ですぐに使える! 英語クイズ 第117回 「黒幕、陰で糸を引く人たち」ってなんて言う? [07:00 2/10] ライフ |
|
[長谷川博己]新人賞受賞で“ミタ”がキタ! 鈴木京香との熱愛は「ご想像にお任せ」 [06:00 2/10] エンタメ |
|
[AKB柏木由紀]「SDN48」ラストシングルMVにゲスト出演 メンバーの10年後の同窓会で再会 [05:00 2/10] ホビー |
|
大東駿介、改名後初の写真集発売--名前を変えたのは「自分の決意表明です」 [00:30 2/10] エンタメ |