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 ブラウザの種 類ごとにアクセス数を調べる。