シェルスクリプトで役立つテキスト文字列のパターンマッチングの基礎:Beginner's Guide(5/5 ページ)
効率的なシェルスクリプティングを行う上で、文字列にかんする操作は非常に重要な役割を果たす。本稿では、これからシェルパターンや正規表現と呼ばれる強力なパターンマッチングを学ぼうとする方に向けたガイドをお届けする。
一般的にパターンを用いたマッチングでは、最長マッチと呼ばれる一致判定が行われ、可能な限り広範な文字列とのマッチングが試みられる。しかし、アスタリスクのマッチ部に必要範囲以上のキャラクタが取り込まれた結果、当該パターン中のほかのコンポーネントによるマッチングが妨げられるというように、アスタリスクによる最長マッチに起因して目的とする文字列全体とのマッチングが行えなくなる可能性も存在するのだ。
例えばパターンb*を用いた文字列bananaに対するマッチングでは*部のコンポーネントがananaというテキストに一致するが、このパターンをb*naに変更すると*部が一致するテキストはanaとなるというように、*はマッチングが可能な範囲内にて最大限のキャラクタを取り込もうとするのである。またキャラクタクラスなどそのほかのパターンコンポーネントについては、通常の文字であるリテラルキャラクタおよび特殊記号の1つである疑問符のマッチングが最優先され、その残りの部分に対してアスタリスクによるマッチングが行われるようになっている。
こうしたシェルパターンに付随する制限の一部は、ユーザー側の工夫によって回避することも可能であり、例えば複数のアイテムを並べたリストをシェル内にて格納したければ、対象となるアイテム群をa,b,cのように区切り文字を挟んでつなげればいい。後記のサンプルコードは、こうしたリストの具体的な使用例である(このcaseステートメントでは、指定した文字列とパターンが一致した場合にのみ出力用のコードを実行する)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ただしこのサンプルスクリプトには、一致のチェックが厳密でないことに起因したバグが潜んでいる。具体的な問題点は、後記のような若干の変更を加えることで明確化するはずだ。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これは先に触れたアスタリスクによる最長マッチに起因する問題であり、その対策としては、最長マッチの影響範囲と区切り記号のカンマの位置関係なども考えなくてはならない。一見すると、後記のようにパターン本体に区切り記号を追加するとうまく行きそうだが、今度はリストの両端に位置するアイテムには一致できなくなってしまう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
この問題の最終的な対処法としては、後記のようにリストの展開時に意図的に区切り記号を追加しておくことが考えられる。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
こうして得られる$listの展開結果はカンマが両端に置かれた文字列となり、当該リストのアイテムすべてがカンマに挟まれた状態となるので、先のパターンによるマッチングは問題なく実行可能となる。
新しいことをはじめる前には「Beginner's Guide」で知識を得てみませんか?
Copyright © 2010 OSDN Corporation, All Rights Reserved.
関連記事
シェルスクリプトのデバッグツール、bashdb
シェルスクリプトで多くの処理をこなしている方は多いだろう。しかし、シェルスクリプトが思い通りに動かないときに、不正な値や到達しないコードパスを探するのは少々やっかいだ。そこで、bashdbを利用すれば、変数をウオッチしたりブレークポイントを設定したりして、速やかにデバッグできる。
SCSH(Scheme Shell)スクリプト入門
Schemeプログラミング言語をベースとしたスクリプト言語「SCSH」。ニコニコ動画上で動作するLispインタプリタなども登場した今こそ、LispやSchemeに触れてみるいいチャンスなのかもしれない。
Webサイトをトラッキングする簡単なスクリプト
コンピュータに任せられる作業はコンピュータに任せてしまえ! 今回は、RSSフィードなどを提供していないサイトを巡回する手間を省くシェルスクリプトを作ることにする。
子ども向けのオープンソース・プログラミング言語
プログラミング環境は昔と比べると複雑になり、専門知識のない若年層にはハードルが高すぎるかもしれない。本稿では若年層に訴求するプログラミング環境を幾つか紹介する。
フリーソフトウェアユーザーによるコミュニティー支援の方法
自分にはパッチ作成やバグフィックスの方法が分からない、そんな自分でも何かの役に立てるのだろうか? と思ったことはないだろうか。プログラマーでない人がFOSS開発への有意義な参加を果たす方法を簡潔にまとめた。
FreeBSDでLAMPをセットアップする
Linuxと同等、もしくはそれ以上に各方面の第一線で活用するFreeBSD。ライセンスやメンテナンスの面でApacheやMySQLなどを使うことに抵抗もあるかもしれないが、FreeBSDでこれらを使ったサーバの構築法を解説しよう。
UMLの初心者向けガイド
UMLという手法を開発者や設計者が採用すると、事前に全体像を把握してからプロセス全体の見通しをつけて必要なテクノロジーを選択するという作業が、比較的簡単に行えるようになる。UMLを知らない、もしくはUML初心者なら、ぜひ一度ご覧いただきたい。
IRCの初心者向けガイド
フォーラム、メーリングリスト、Google検索。いずれも疑問の解決に役立つものだが、本当にすぐにでも答えが知りたい場合にはIRC(Internet Relay Chat)が適している。まだ一度も使ったことがない人は、ぜひ本稿を読んでIRCの世界に足を踏み入れてほしい。
ハードディスクの中身を誤って消した場合のファイル復旧方法
重要なファイルを誤って消してしまい涙で枕をぬらすことになる前に、事実上、あらゆるファイルシステムのパーティションを復元し、かつ、たいていの種類のファイルを復元できるこの方法を知っておいてほしい。備えあれば憂いなし、である。
Linux仮想化入門
仮想化技術は日進月歩の勢いで進化を遂げている。本稿では、これから仮想化技術を試してみようとする方のために、よく使われている仮想化環境であるVMware、VirtualBox、QEMUの3つを紹介する。
