ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

Similar documents
Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

シェルプログラミング コマンドをパイプでつなげるだけでは済まないような ある程度まとまった処理を複数のコマンドを制御構文を用いたりしてファイルとしたものを ( シェル ) スクリプトと呼ぶ シェルプログラム バッチなどともいう.bash_profile もシェルスクリプトなので このファイルを解読し

_unix_text_command.pptx

プレポスト【解説】

unix15-script2_09.key

Report#2.docx

Taro-cshプログラミングの応用.jt

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

Report#2.docx

PowerPoint プレゼンテーション

OWI(Oracle Wait Interface)の概要

slide5.pptx

フィルタとは

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

* ライブラリ関数 islower(),toupper() を使ったプログラム 1 /* 2 Program : trupper.c 3 Student-ID : K 4 Author : TOUME, Kouta 5 Comments : Used Library function i

PowerPoint Presentation

Microsoft Word - no103.docx

PowerPoint Presentation

Si 知識情報処理

Microsoft Word - no11.docx

Microsoft Word - Javacc.docx

PowerPoint プレゼンテーション

sinfI2005_VBA.doc

Taro-Basicの基礎・条件分岐(公

PowerPoint プレゼンテーション

シェルスクリプトマガジン Vol27

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog04.ppt

Prog1_10th

Report#2.docx

文法と言語 ー文脈自由文法とLR構文解析2ー

練習 4 ディレクトリにあるファイルを直接指定する (cat) cat コマンドを使う (% cat ファイル名 ) と ファイルの内容を表示できた ファイル名のところにパス名を使い ディレクトリ名 / ファイル名 のように指定すると ディレクトリ内にあるファイルを直接指定できる 1 % cat _

How_to_use_integritycheck

Microsoft Word - Training10_プリプロセッサ.docx

ポインタ変数

ポインタ変数

PowerPoint Presentation

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

PowerPoint プレゼンテーション

文字列操作と正規表現

Microsoft PowerPoint - 09re.ppt [互換モード]

スライド 1

2006年10月5日(木)実施

PowerPoint プレゼンテーション

基礎プログラミング2015

Microsoft PowerPoint - prog03.ppt

Prog1_6th

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

スライド 1

kiso2-03.key

レポートのデータへのフィルタの適用

デュアルウェア講習会課題 5 会津大学講習会 簡単な IoT を作成 2018 The University of Aizu

コンピュータリテラシ 第 6 回表計算 2 このスライド 例題 /reidai6.xlsx /reidai6a.xlsx 課題 12 /reidai6b.xlsx /table12_13.xlsx

プログラミング実習I

初心者用

memo

シェルスクリプトマガジン vol.30

memo

TC5.ids

02: 変数と標準入出力

PowerPoint プレゼンテーション

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

ポインタ変数

リスト 1 1 <HTML> <HEAD> 3 <META http-equiv="content-type" content="text/html; charset=euc-jp"> 4 <TITLE> 住所の検索 </TITLE> 5 </HEAD> 6 <BODY> <FORM method=

情報処理演習 B8クラス

2011 年度春学期基礎ゼミナール ( コンピューティングクラス ) A コース 1 / 18 コンピュータリテラシー A コース 第 10 講 [ 全 15 講 ] 2011 年度春学期 基礎ゼミナール ( コンピューティングクラス ) 同志社大学経済学部 DIGITAL TEXT コンピュータリ

memo

ポインタ変数

スライド 1

JavaScriptで プログラミング

レポートでのデータのフィルタ

テキスト処理第 2 回 田中哲産業技術総合研究所情報技術研究部門 akira/textprocess/

Taro-ファイル処理(公開版).jtd

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

データ構造

オートマトン 形式言語及び演習 3. 正規表現 酒井正彦 正規表現とは 正規表現 ( 正則表現, Regular Expression) オートマトン : 言語を定義する機械正規表現 : 言語

計算機プログラミング

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

1. 入力した文字列を得る 1.1. 関数 scanf() を使う まずは関数 scanf() を使ったプログラムを作ってみましょう 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: #include<stdio.h> #define SIZE 128 main(

演算増幅器

Microsoft PowerPoint - CproNt02.ppt [互換モード]

情報処理Ⅰ

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

CM-3G 周辺モジュール拡張技術文書 INA226センサ(電流、電圧、電力)

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - prog03.ppt

Section1_入力用テンプレートの作成

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - 5Chap15.ppt

memo

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Excel データ出力ガイドブック 第 1.0 版平成 30 年 9 月 1 日制定 株式会社中電シーティーアイ

PowerPoint プレゼンテーション

Prog1_12th

Microsoft Word - VBA基礎(6).docx

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

PowerPoint プレゼンテーション

Transcription:

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : 095739 K 氏名 : 當銘孔太

1. UNIX における正規表現とは何か, 使い方の例を挙げて説明しなさい. 1.1 正規表現とは? 正規表現 ( 正則表現ともいう ) とは ある規則に基づいて文字列 ( 記号列 ) の集合を表す方法の 1 つです ファイル名表示で使うワイルドカードも正規表現の兄弟みたいなもの 正規表現は ワイルドカードのような簡単な使い方から複雑な文字列表現まで 幅広い利点を提供してくれる 1.2 正規表現で使われるメタキャラクタ メタキャラクタ 表現 メタキャラクタ 表現. 任意の 1 文字 + 1 回以上の繰り返し ^ 行の先頭? あるかないか $ 行の終わり \ タグ付き正規表現 [ ] 範囲内の任意の 1 文字 または * 0 回以上の繰り返し ( ) グループ化 1.3 簡単な正規表現の例 \\abc a.c a*c [abc]x [^abc]x \([ab]c\)\1 \abc という文字列を意味する aac abc acc... という文字列を意味する c ac aac aaac などの文字列を意味する ax bx cx などの文字列を意味する dx ex fx... などの文字列を意味する acac bcbc という文字列を意味する 1.4 オリジナル正規表現 ^[a-za-z0-9]+@[a-za-z0-9]+\.ac\.jp$ - ^ は行の先頭 - [a-za-z0-9]+ は英小文字 or 英大文字 or 数字の 1 回以上の繰り返し - @ はそのまま @ を表す - \.ac\.jp は.ac.jp を表す よって この正規表現は最後が.ac.jp で終わるメールアドレスの検索に使える

2. 次のスクリプトを script.sh で保存し, 次のスクリプトを説明しなさい. 2.1 スクリプト : script.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/bin/sh # キロバイトで与えられた入力を キロバイト メガバイト ギガバイトのうちの # いずれか適切な単位で出力する. gmk() { if [ $1 -ge 1000000 ] ; then echo "$(scriptbc -p 2 $1 / 1000000)Gb" elif [ $1 -ge 1000 ] ; then echo "$(scriptbc -p 2 $1 / 1000)Mb" else echo "${1}Kb" } if [ $# -gt 1 ] ; then echo "Usage: $0 [dirname]" >&2; exit 1 elif [ $# -eq 1 ] ; then cd "$@" for le in * do if [ -d "$le" ] ; then size=$(ls "$le" wc -l sed 's/[^[:digit:]]//g') if [ $size -eq 1 ] ; then echo "$le ($size entry) " else echo "$le ($size entries) " else size="$(ls -sk "$le" awk '{print $1}')" echo "$le ($(gmk $size)) " done \ sed 's/ /^^^/g' \ xargs -n 2 \ sed 's/\^\^\^/ /g' \ awk -F\ '{ printf "%-39s %-39s\n", $1, $2 }' exit 0

2.2 解説前に... 2.2.1 関数シェルスクリプトでも関数を作ることができ 以下のような構文となる 関数名 () { 処理... } 関数に引数を渡す場合はシェルと同様にスペース区切りで渡す 関数に渡された引数を参照する場合はシェルと同様に $1,$2,... と参照する 2.2.2 数値比較 変数等を数値として評価して比較したい場合は 以下のように記述する 数値評価演算子 意味 数値 1 -eq 数値 2 数値 1 と数値 2 が等しい場合に真 数値 1 -ne 数値 2 数値 1 と数値 2 が等しくない場合に真 数値 1 -gt 数値 2 数値 1 が数値 2 より大きい場合に真 数値 1 -lt 数値 2 数値 1 が数値 2 より小さい場合に真 数値 1 -ge 数値 2 数値 1 が数値 2 より大きいか等しい場合に真 数値 1 -le 数値 2 数値 1 が数値 2 より小さいか等しい場合に真 2.2.3 コマンド - sed コマンド構文 : sed [ オプション ] [ コマンド ] [ ファイル名 ] コマンド d 行を削除 -s/// 各々の行で最初に一致した文字列だけ置換 (s/ パターン / 置換文字列 /) -s///g 全体を置換 (s/ パターン / 置換文字列 /g) -s/// 数値各々の行で指定した数番目の文字列だけ置換 (s/ パターン / 置換文字列 / 数値 ) - awk コマンド構文 : awk [ オプション ] [ プログラム ] [ ファイル名 ] 機能 : 読み込んだテキスト中に指定されたパターンがないか照合し 一致するパターンが見つかった場合 指定された処理をする - xargs コマンド 構文 : xargs [ オプション ] [ コマンド ( 引数 )] 機能 : 標準入力から引数を読み込み 指定のコマンドを実行する

2.3 解説 : script.sh 1 行目 #! の後にシェルのパスを書くことで シェルコマンドとして認識される 3-4 行目 コメント文 # の後の文は実行する際無視される 5-14 行目 関数 gmk() を定義 7-8 行目 if 文 引数の値が 1000000 より大きいか等しい場合 then 以下の処理をする - 引数を 1000000 で割った値に Gb をつけて値を返す 9-10 行目 elif 文 引数の値が 1000 より大きいか等しい場合 then 以下の処理をする - 引数を 1000 で割った値に Mb をつけた値を返す 11-12 行目 else 文 引数に Kb をつけた値を返す 16-17 行目 シェルに与えられた引数の数が 1 より大きかったら then 以下の処理をする - echo で シェルのファイル名とディレクトリ名をエラー出力とし シェルの実行を終了 18-19 行目 シェルに与えられた引数の数が 1 と等しかったら then 以下の処理をする - cd で 引数のディレクトリへ移動する 23-37 行目 for 文 現在のディレクトリ内にあるファイルやディレクトリを引数とする 25-31 行目 if 文 "$le" がディレクトリなら then 以下の処理をする - ls "$le" を wc -l で行数を取得し sed コマンドで 先頭が 10 進数字でないなら 削除 ( 置換文字列がないので..) した結果を変数 size に代入する - if 文 $size( ファイル数 ) が 1 と等しかったら then 以下の処理をする - echo コマンドで $le ($size entry) ( ディレクトリ名 & ファイル数 ) を出力 - else 文 $size( ファイル数 ) が 1 より大きい場合は - echo コマンドで "$le ($size entries) を出力

32-35 行目 else 文 - ls -sk "$le" で ファイルサイズを取得 awk コマンドで ファイル名を除く 得た値を変数 size に代入する - echo コマンドで ファイル名とファイルサイズを出力する このとき 関数 gmk に size を引数として渡し 単位変換した値を出力する 37-41 行目 for 文の処理結果を sed xargs sed awk の順にパイプでつなぐ - sed コマンド : 空白を ^^^ に置換する - xargs コマンド : 2 つ引数を読み込み 次の処理 ( コマンド ) を実行する - sed コマンド : ^^^ を空白に置換する - awk コマンド : 左詰め 39 文字で引数 1 引数 2 を出力する 3. 考察今回のスクリプトは どのような処理をしているのかが分かり易くて理解しやすかった しかし 新しいスクリプトの構文や コマンドが多くて解説する前に教科書や Web サイトで 構文やコマンドについて調べながらレポートを作成していたので 結構時間がかかりました 今回のスクリプトでは ファイルやディレクリのファイルサイズを取得し 単位変換という処理でしたが このスクリプトを応用したら便利なスクリプトができると思うので 暇なときにでも考えてみたいです 参考文献 - 新 The UNIX Super Text[ 上 ] 山口和紀古瀬一隆 [ 監修 ] - シェルスクリプト入門 http://www.k4.dion.ne.jp/~mms/unix/shellscript/index.html - 正規表現メモ http://www.kt.rim.or.jp/~kbk/regex/regex.html#classname - UNIX コマンド http://www.k-tanaka.net/unix/