2011年06月24日 情報科学類 コンピュータリテラシ 筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2011/2011-06-24
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
^a.*tion$
」。「aで始まり、tionで終わるもの」。
「^
」、「.
」、「*
」、「$
」 は、
メタキャラクタ。特別の意味を持つ。
メタキャラクタを含まない文字列も、正規表現として意味を持つ。
*,?,[]
」などは、単にワイルドカードではなく、正規表現に
近い。複数の場所に「*
」が書けるので、単なるワイルドカードではな
い。
\
^
[]
の中で使われたときには否定の意味)
$
.
[c1c2c...cn]
c1c2c...cn
のどれか。
例:[abc]
ならa
かb
かc
のどれか。
[c1-c2]
c1
からc2
の範囲のどれか。
例:[a-z]
ならa
からz
までのアルファベットの小文字。
[^c1c2c...cn]
[^abc]
ならa
でもなくb
でもなくc
でもないもの。
*
.*
なら任意の文字の任意回数の繰り返し。
[a-z]*
ならアルファベット小文字の任意回数の繰り返し。
ab
なら、「a
」に続き「b
」。
\(正規表現\)
X\(abc\)*X
は、XabcabcX
にマッチする。
\N
X\(abc\)\1X
は、XabcabcX
にマッチする。
\<
\>
正規表現 | マッチする例 | マッチしない例 |
abc | abc, abcd | ab |
\\abc | \abc, \abcd | \ab |
a.c | aac, abc, xabc | ac, a, c, |
a*c | c, ac, axc, aaac, xc | a |
[abc]x | ax, bx, XaxX | dx |
[^abc]x | dx, ex | bx, Xbx, abx |
正規表現+
正規表現
の1回以上の繰り返し。「正規表現 正規表現*
」と同じ。
正規表現?
正規表現
が0回、または、1回。
正規表現1|正規表現2
正規表現1かまたは正規表現2
。orの意味。
(正規表現)
正規表現
のグループ化。
\(\)
やその参照\N
は廃止された。
|
の意味が違い、egrepで
|
と書く所、Emacs では
\|
と書く。egrep で
\|
と書く所では、Emacs では|
でよい。
正規表現1\|正規表現2
正規表現1かまたは正規表現2
。orの意味。
\`
\'
\w
\W
\b
\B
通常(一括) | インクリメンタル | |
正規表現なし | search-forward | isearch-forward |
正規表現付き | search-forward-regexp | isearch-forward-regexp |
-forward
以外に -backward
がある。
C-r isearch-backward
C-s isearch-forward
C-M-r isearch-backward-regexp
C-M-s isearch-forward-regexp
C-M-s
は、Esc C-s
, C-M-r
は、Esc C-r
と同じ。
一括 | 問合せ付き | |
正規表現なし | replace-string | query-replace |
正規表現付き | replace-regexp | query-replace-regexp |
M-% query-replace
C-M-% query-replace-regexp
+
,?
,|
,()
が使える。
+
,?
,|
,()
が使える。。
printf()
や substr()
による非正規表現で
の置換えができる。
注意点
$
」や「*
」を解釈しないように、
シングルクォート「''
」でくくるなどして、エスケープする。
$ grep pattern file
$ grep -v pattern file
$ grep pattern1 file | grep pattern2 file
$ cat file | pattern1 | grep pattern2 file
$ grep pattern1 < file | grep pattern2 file
このことと、次の結果を比較しなさい。
$ grep pattern1.*pattern2 file
$ grep pattern2.*pattern1 file
grep と grep -v を組み合わせる利用してみなさい。
正規表現を用いて、検索してみなさい。 完璧を目指すのではなく、少々目的外のものが混じってもよいものとする。
$ ruby -n -e 'print if /正規表現/'
$ cd /usr/share/dict
$ head words
$ tail words
$ lv words
$ wc words
$ grep '^pattern' words
$ look '^pattern'
$ ls ~yas/secure_html/coins/literacy-2011/
$ ls -a ~yas/secure_html/coins/literacy-2011/
$ cat ~yas/secure_html/coins/literacy-2011/.htaccess
ここにある .htaccess にどのような記述がなされているかを調べなさい。
(1) 正規表現の検索機能を用いて、次のファイルから次のことがらを検索して 画面に表示しなさい。レポートには結果だけでなく、どのようなコマンドを打っ たのかを示しなさい。head コマンドや tail コマンドと組み合わせて、表示の 行数を採点しやすい程度にしぼりなさい。
なお、grepコマンドには、or の機能がない。orが必要な場合、grep コマンド を複数回実行してもよい。egrep 機能を用いれば 1 回で終わることもある。
(2) 正規表現の検索機能を用いて、次のコマンドの実行結果から次のことがら を検索して画面に表示しなさい。
(3) Emacs、または、sed コマンドの正規表現の置換え機能を用いて、次のこと を行いなさい。
1: #include <stdio.h> 2: 3: #define NAME "(name)" 4: 5: int main() 6: { 7: printf("Hello, %s\n", NAME ); 8: }
(4) [加点] find コマンド、sed コマンド等、または、このページで紹介した コマンドを組み合わせて、次のようなシェル・スクリプトを作成しなさい。
(5) [加点] sed コマンド、または、このページで紹介したコマンドを組み合わ せて、次のいずれかのシェル・スクリプトを作成しなさい。
(5a) HTML からインライン・イメージのファイルを取り出す
<IMG>
タグの行を抜き出す
SRC="ファイル名"
のうち、
"ァイル名"
の部分だけを表示する。
<IMG
と SRC
が別の行にある場合には、
対応しなくてもよい。
<IMG>
タグとは無関係の
SRC="ファイル名"
の
"ァイル名"
を表示しない。
(5b) [加点] 過去数日のWebサーバ・アクセスログから自分の WWW ページへの アクセスを、ファイルごとに数える。
(5c) [加点] 過去数日のWebサーバ・アクセスログから自分の WWW ページへの アクセスを、ファイルごとに数える。
(5d) [加点] 過去数日のWebサーバ・アクセスログを解析し、Web ブラウザの種 類ごとにアクセス数を調べる。