UNIX初心者の者です。現在Solarisを使い毎日悪戦苦闘しています。
質問なのですが、「正規表現」と「ワイルドカード」とはどのように違うものなのでしょうか。ちょっと混乱しています。
現状の認識では、
「ワイルドカード」-コマンドラインで使うもの。エスケープするときは「’’」で囲む。複雑な指定は難しい。
「正規表現」-コマンドの引数や、スクリプトなどで使われるもの。エスケープするときは「¥」をつける。基本的に「’’」で囲むもの。様々な表現が可能。
といった感じにとらえています。が、いざ使うとなると混乱している状態です。
すみませんが、この2つについて教えてもらえないでしょうか。
あと参考になるような本やホームページなどもあるでしょうか?コマンドの組み合わせやシェルスクリプトの記述なども勉強中なので、その関係の事でもよいので。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

正規表現(Regular Expressions, RE)は使いこなすと便利ですよね。



>「ワイルドカード」-コマンドラインで使うもの。エスケープするときは「’’」で囲む。
>複雑な指定は難しい。
実際にはシェルスクリプトでも使えますが、ワイルドカードの展開はシェルの仕事だから
Cプログラムでは処理する必要はないし、だいたいそういう認識でいいのでは。
「''」で囲むというのはワイルドカード自身の属性というよりは
コマンドラインでシェルが展開してくれるのを防ぐためですね。

「ワイルドカード」とはもともとトランプ用語で、どのカードの代わりにも使える
オールマイティなカードを指したもので、これから転じて
file000.jpg, file001.jpg,...file999.jpg というファイルがあるとき
「file*.jpg」とか「file???.jpg」「file[0-9][0-9][0-9].jpg」などという指定ができるのが
シェルのワイルドカードで、ここまではご存じと思います。

Solaris のシェルというと Bourne Shell(sh)でしたっけ。Linux の bash など
モダンなシェルよりは機能的に劣ります。
sh ではどのみち複雑な指定はできないのでざっと流しても構いません。
また、bash のような高機能シェルだったら help コマンドでオンラインヘルプが見られます。

シェルのワイルドカード(グロビング)については、アスキーの
「たのしい UNIX」「続・たのしい UNIX」(坂本文)が参考になるでしょう。
また、やはりアスキーの「UNIX プログラミング環境」(Kernighan&Pike著、石田晴久訳)も
古き良き UNIX 文化を伝える不朽の名著ですから、かえって Solaris の sh では
素直に使えるかもしれません。シェルスクリプトから高度なCプログラミングの勉強にも
もってこいです。
ここでも興味深い質問がありましたので、ぜひご覧ください。
No.483118 質問:シェルスクリプトに手をだしてみたいのですが。。。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=483118

>「正規表現」-コマンドの引数や、スクリプトなどで使われるもの。
>エスケープするときは「¥」をつける。基本的に’’」で囲むもの。様々な表現が可能。

よく勉強してらっしゃいますね。正規表現はワイルドカードよりずっと柔軟な表現が可能で
その気になれば分厚い本が一冊書けてしまいます。
事実、オライリーから「詳説 正規表現」(Jeffery E. F. Friedl 著、歌代和正他訳)
という大部が出ています。
http://www.amazon.co.jp/exec/obidos/ASIN/4900900 …
オライリー・ジャパンのサイトになかったとこを見ると、第2版が近々出るのかな?

また正規表現の文法にはさまざまな方言があって、grep, sed のような単純なもの
(BRE, Basic RE)や egrep, awk のように多少拡張されたもの(ERE, Extended RE)
などありますが、現在最有力なのが Perl5 のものです。
Python や Ruby といった後輩スクリプト言語や Java 1.4 の正規表現も
Perl5 互換を目標としています。

正規表現は文字列処理の「肝」ですので(これを軽視しているMSソフトが信じられない!)
解説しているサイトはたくさんあります。
参考 URL の正規表現リンク集からいくらでもたどれますが、
2番目の「Riue ちゃんの正規表現講座」が初心者向けでしょうか。
おさらいには以下の「正規表現メモ」がいいかと思います。
http://www.kt.rim.or.jp/~kbk/regex/regex.html
また、「Perl 正規表現雑技」をご覧になれば、素因数分解までやってのける
正規表現のパワーに瞠目されること間違いありません。
http://www.din.or.jp/~ohzaki/regex.htm

このように、正規表現が最も威力を発揮するのは Perl などの
スクリプト言語ですので、Perl 関連のサイトやドキュメントをご覧になれば
いっそう勉強が進むと思います。長くなってしまいましたが、
美味しいとこだけつまみ食いして、できるところから始めればいいのです。
健闘を祈ります(^^

参考URL:http://www2.famille.ne.jp/~akio1998/l_grep.html, …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
頭の中がすっきりしたような気がします。
毎日、基本的な事しかしていないのですが、それでもこの2つを使うと、いろいろ便利になります。

>正規表現は文字列処理の「肝」ですので

スクリプトなどを勉強すると、まさにおっしゃる通りだと実感します。使っている人には当たり前なのでしょうが、初心者の私には、コマンドを使った様々な機能と共に、正規表現を勉強するつもりです。

>美味しいとこだけつまみ食いして、できるところから始めればいいのです。

最初なのでなんでも有りの気持ちでやっていましたが、シンプルかつ実用的なご助言、ありがとうございます。正規表現なども言葉は悪いですが「いかに楽をするか」「短い表現でシンプルに表すか」みたいなところを感じています。
ありがとうございました。

お礼日時:2003/05/24 15:12

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q高校野球・タイブレーク方式導入に賛成・反対ですか?

【高校野球・タイブレーク方式導入に賛成ですか?反対ですか?】


皆様からの御意見をお聞かせ頂けたらと思います。御投稿をどうぞよろしくお願い致します。


私は、タイブレーク方式導入に、基本的には賛成です。その理由として、特に夏の大会において、最近の尋常ではない暑さのなか、炎天下のなか、グラウンドでプレーする選手の健康面を考えてのことです。


その反面、高校野球の面白さのひとつには、予想の付かない劇的な幕切れというものがあります。タイブレーク方式導入に当たって、勝負の面白さが減ってしまうのではないか…という懸念も、正直、なくはありません。


しかし、グラウンドでプレーする子どもたちの【健康】にはかえていられません。


よって、私は、基本的には、タイブレーク方式導入に賛成する立場です。

皆様からの御投稿をお待ちしております。


【高校野球におけるタイブレーク方式とは?】

9回終了時点で勝負の決着が付かない場合、10回以降の攻撃は、1死満塁の状況から始めるという制度のこと。

Aベストアンサー

選手の健康面を心配するなら、開催時季や時間帯及び大会スケジュールを考慮すべき。
競技のありかたを変えてしまうようなやり方は、主催者側のエゴ以外の何者でもない。

Qshで書いたシェルスクリプトで`とか'とかの中で変数を使いたい。

標題の質問ですが、gnu dateコマンドを使って数日前の日付を取得しているのですが、

こんな具合:
DATE=`date --d '1 day ago'`

何日前の日付を取得するかを引数で決めたいのです。
しかし
DATE=`date` --d '$1 day ago'`
これでは当然上手く行きません。
上手いことエスケープして変数を使用する方法を教えてください。

シェルはshです。

Aベストアンサー

ごめんなさい、`がひとつ多かった^^;


``の中でも変数は展開されますので、

DATE=`date --d $1' day ago'`

でいけます

Q硬式テニスタイブレークのサーブの順番

硬式テニスのタイブレーク時のサーブの順番についてです。

ダブルスで下記のような設定として下さい。

Aチーム:aさん、bさん
Bチーム:cさん、dさん

ゲームでのサーブの順番は

aさん → cさん → bさん → dさん

です。

例えばどこかのセットの12ゲーム目のサーブをcさんが行って6-6になりタイブレークに入った場合は、

(1)cさんの次のbさんからサーブを始めて、上記の順番で回っていく(最初だけ1本で後は2本ずつということは理解しております)

(2)タイブレークはそれまでのゲームとは別の流れでaさんから始まり、上記の順番で回る。

(3)12ゲーム目のサーブはBチームが打っているので、タイブレークはAチームが最初の1本を打ち、次からは2本ずつAチーム、Bチームで交代で打つ。
この際、チーム内の順番は任意でよい(もちろん同じ人が続くのはダメ)。

の3つのどれかかなと考えています。

おそらく(2)だと思いますが、プロ選手のダブルスを見なくなって久しく、昔は見ていたのですがさっぱり覚えていません。

1セットマッチより長い試合をしたことがないので4の倍数ゲーム以外でタイブレークに入ることを経験したことがない(6-3,6-6でのタイブレークとか)のですが、テニスを21年もやっていながら改めて振り返ってみるとこんなことも覚えていなかったのは恥ずかしい限りですがご教授頂ければと思います。

硬式テニスのタイブレーク時のサーブの順番についてです。

ダブルスで下記のような設定として下さい。

Aチーム:aさん、bさん
Bチーム:cさん、dさん

ゲームでのサーブの順番は

aさん → cさん → bさん → dさん

です。

例えばどこかのセットの12ゲーム目のサーブをcさんが行って6-6になりタイブレークに入った場合は、

(1)cさんの次のbさんからサーブを始めて、上記の順番で回っていく(最初だけ1本で後は2本ずつということは理解しております)

(2)タイブレークはそれまでのゲームとは別の流れでaさんから始...続きを読む

Aベストアンサー

えーと、考え方は(1)です。
当初のサービスする順番で、タイブレークに入ります。

ただ、気になったのは、そのセットが始まったときのサーバーがaさんで、以下cさん → bさん → dさんの順番だとすると、12ゲーム目はdさんのサーブです。
従って、タイブレークでの最初のサーバーはaさんです。

セットが終わってしまえば、次のセットは、チーム内のどちらからサーブを初めてもよいのです。
タイブレーク内が誰のサーブで終わったかも関係ありません。

1セット目、タイブレークでAチームが7-6で取ったとして、2セット目はBチームのサービスからですが、cさん、dさん、どちらから初めてもよいのです。

cさんが12ゲーム目のサーバーであるためには、4人のサービス順の中で最後のサーバーでなければなりません。
aさん → cさん → bさん → dさんの順では、cさんが12ゲーム目のサーバーということはあり得ないことになります。

aさん → dさん → bさん → cさん
bさん → dさん → aさん → cさん

このどちらかの順番の場合ですね。

蛇足ですが、セットが変われば、レシーバーのポジションも変えてよいことになっています。

えーと、考え方は(1)です。
当初のサービスする順番で、タイブレークに入ります。

ただ、気になったのは、そのセットが始まったときのサーバーがaさんで、以下cさん → bさん → dさんの順番だとすると、12ゲーム目はdさんのサーブです。
従って、タイブレークでの最初のサーバーはaさんです。

セットが終わってしまえば、次のセットは、チーム内のどちらからサーブを初めてもよいのです。
タイブレーク内が誰のサーブで終わったかも関係ありません。

1セット目、タイブレークでAチームが7-6で取ったとし...続きを読む

Qiptableコマンドを複数記載したスクリプトを実行したいです。

Linuxのコマンドについてお聞きしたいです。
iptableコマンドを複数記載したスクリプトを作成し、そのスクリプトを実行することによってパケットフィルタリングの設定をしようと思っています。
Windowsで下記のようなファイルを作成しました。

#!/bin/sh

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -d 210.98.76.54 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth1 -d 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -d 202.228.202.2 -p udp --sport 53 --dport 1024:65535 -j ACCEPT

iptables -A INPUT -j LOG --log-prefix "### INPUT ###"
iptables -A FORWARD -j LOG --log-prefix "### FORWARD ###"


これをLinuxの/rootに作成したbinフォルダにフロッピーでコピーしました。
ファイル名をfilterにしたので、[root@linux root]# filter とし、Enterとし、
スクリプトを実行して設定を反映させようとしました。

しかし、: bad interpreter: そのようなファイルやディレクトリはありません
と出てしまいます。

何が足りないのでしょうか?

Linuxのコマンドについてお聞きしたいです。
iptableコマンドを複数記載したスクリプトを作成し、そのスクリプトを実行することによってパケットフィルタリングの設定をしようと思っています。
Windowsで下記のようなファイルを作成しました。

#!/bin/sh

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

iptables -P INPUT DROP
iptables -P FORWARD DROP

iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -...続きを読む

Aベストアンサー

スクリプトをWindowsで作成したからです.
改行コードに余分な<CR>があり,/bin/sh<CR>という
コマンドは無いので,bad interpreter になります.

dos2unix というコマンドが使えれば,簡単コードを
変換できます.

まあ,今後のためには,Linux上でエディタを使える
ようになることをお勧めします.

Qタイブレークをやらないデビスカップ

現在デビスカップ日本対カナダ戦が行われているが、各セットのゲームカウントが6-6になった場合、タイブレークを行なわず2ゲーム差がつくまで延々とやる。
なぜデビスカップではタイブレークをやらないのか?

Aベストアンサー

テニスは元々紳士のスポーツなんで、1点差で逃げ切る様な卑怯?な勝ち方をさせない為に必ず2点差以上の勝利のルールとなっています(デュース等)。当然2ゲーム以上差とならないとセットは取れないですが、接戦の場合は延々とゲームが続くこともあります。しかしそれではTVの時間内に入らなくなるので考え出されたのが「タイブレーク」です。しかし伝統ある試合では、こんなTV重視のルールを良しとせず採用されませんでした。ウインブルドンも最後まで採用しなかった様ですが、現在は最終セットを除き採用されています。デビスカップの様な国の代表試合では、そういった意義から採用されないのかと思います。でも時間規定の無い競技は五輪競技でもTV条件を重視してドンドンルールを変更しています(例えばスキージャンプで2回目進めるのは30位以上とか、バレーボールのサーブ権廃止とか)ので、将来は分かりません。

QYAHOOのトップページを開くと・・・・'Windows Media Player Extension'アドオンを実行しようとしています。と表示されますが

最近、YAHOOのトップページを開くと
「このWebサイトは、'Microsoft Corporation'からの'Windows Media Player Extension'アドオンを実行しようとしています。Webサイトとアドオンを信頼し、アドオンを実行するにはここをクリックしてください。」
と、表示されることがあります。(何故か毎回表示されるわけではありません)

IE8で発生します。
他のブラウザでは発生しませんし、通常のフラッシュプレーヤーは入れてます。

質問1、毎回もしくは毎日これが表示されるわけではないのは
なぜでしょうか?

質問2、もしこれを実行したらどうなるのですか?
Windows Media Playerが立ち上がって動画かなにかが再生されるんでしょうか?もしくはどういう効果があるのでしょうか?

環境は、Windows Xp IE8 Windows Media Player11 です。

Aベストアンサー

実行でOKですよ。1回OKしたらでてこないと思いますが、パソコンを修理していますが、どのパソコンもIE8をインストール後は出ますよ。
そして1回だけ、OKすれば、次回からでてこないと思いますが、

その後も特に問題ありません。もし、不安ならその後、セキュリティチェックしてみたらどうです。

IE8で設定をする際に出るもので、VISTAでいうセキュリティチェック項目のひとつです。このチェックはマイクロソフトのものもチェック対象になるため IE7までは裏で自動で動いていたものが、IE8では、セキュリティがあがったため、一度表示されただけと、認識しております。


多分、全てハイという項目があると思います。めんどくさければ全てハイでOK このアドオン系は マイクロソフトと書いてあったり、アドビ
と書いてあれば 基本大丈夫です。 (もし変なサイトにいった後や、セキュリティソフトを入れてない場合などは除きます。)

Qタイブレークについての要望

野球のタイブレークが話題になっていますが、
今のやり方でなく、
10回からにして、
サッカーのPKのように、
一塁に出塁した数で競うようにすれば、
さらに決着が付きやすいと思いますが。

ひとりずつでの交代は、手間が掛かるので、
3人か、5人ずつやって、出塁・アウトになったら、
次打者に交代します。

タイブレークそのものは、
ゆくゆくは、高校野球・プロ野球にも採用されますか?

Aベストアンサー

あくまで短時間で決着をつけられるように、ブロードキャストする
観点からの折衷案ですからね。
引き分けを採用する形に落ち着くでしょうね。
今回はたまたま直前の決定だったからやむを得ずという形でやりましたけど、もっと前の決定であれば殆どの国は反対していたでしょうから。
あくまで一時的措置ですよ☆

Qvi での '#' の入力について

初めまして。

viエディタにて、'#'を入力する際に、
'\'→'#'の順に入力することで初めて'#'を入力できます。
'#'のみで入力を行うことはできますでしょうか?

Aベストアンサー

ふつうは#だけで入力できますが。
どのようなOSのどのようなviでしょうか?
端末の設定はどうでしょうか?

まれに、古い端末設定をデフォルトとするシステムでは、erase文字などが#になってしまっている場合があります。この場合でも最近の多機能シェルはそれ自身のキーバインドで解釈しますが、viなどのアプリケーションを起動したときに端末の設定が有効になるわけです。

ためしに、stty してみてください。erase が # になってしまっているのだとすると、stty erase ^H などで標準の状態に変更できます(詳しくはOS依存)。

Q高校野球でのタイブレーク制導入について

現在行われている全国高校軟式野球大会準決勝、中京対崇徳戦が3日間延長45回で0対0のままである。
大会規定により、明日は最大9回までとし、それでも同点の場合は抽選で決勝進出校を決めるという。
日程短縮のために導入したサスペンデッドゲーム制が、逆に日程が伸びた皮肉な事になった。
社会人野球や国際試合ですでに導入されている「タイブレーク制」を、高校野球でも導入しようかという声が出ている。
皆さんは、高校野球にタイブレーク制を導入する事に、賛成?反対?どちらでしょうか?

Aベストアンサー

反対です。

一死満塁で打順も好きなところから始められる。下手すれば初球のたった一度の失投や
味方のエラーで勝負が決まってしまうことも十分にありうる。だったらくじ引きの方がマシ。
戦犯を生むこともなく「くじ運が悪かった」とあきらめがつくんじゃないかと思う。

それとこういう話題になった時に必ず出てくる「激闘、名勝負、ドラマが生まれなくなるから
反対!」というセリフ。自分が楽しめればそれでいいのかと毎回思う。

尊重すべきは球児の体や体調であって白熱するドラマではない。

Qコマンドプロンプトのdelコマンドについて

del /S /Q "C:\Test" としてTestフォルダにあるもの全て削除するコマンドプロンプトを入力してもファイルが削除されてもフォルダが消えません。
/S
指定されたファイルをすべてのサブディレクトリから削除します。
/Q
ワイルドカードを使用して一括削除するときに、確認のメッセージを表示しません。(QUIET モード)

各オプションの使用方法もあっていると思うのですが何故でしょうか?

Aベストアンサー

コマンドプロンプトのdel(delete)コマンドはファイルを削除するものです。
ディレクトリの削除はrd(rmdir)コマンドです。
delコマンドでファイルを全て削除したのち、
rd ディレクトリ /S /Q
で指定ディレクトリを配下のサブディレクトリも含めて確認なしで削除できます


人気Q&Aランキング

おすすめ情報