倒そう5 その2

【test5.sh】

``で囲むと変数の出力を変数に代入できる

{}は変数区切り grep -E は正規表現オプション

.t. 任意文字t任意文字で、tを含むファイル抽出

a1=ls | grep -E ".*t.*" a1に保存 a2= ls echo ${a1} echo ${a2} b=pwd echo "Ima ha ${b} ni imasu"

演算コマンド expr

expr 1 + 3

変数を使って計算

n=3 m=expr ${n} * 5 echo "${m} ha desu"

実行 sh test5.sh test5.sh: 1: grep -E: not found test5.sh: 5: 247032: not found

Ima ha /home/insprings2 ni imasu 4 expr: syntax error: unexpected argument ‘247032’ ha desu

【test6.sh】

test コマンド と if 文

条件をみたすとき、True 条件みたさないときFalse

a="taro" if test $a == taro;then echo "OK" else echo "No" fi

実行 sh test6.sh test6.sh: 4: test $a == taro: not found No

【test7.sh】

test コマンド 条件をみたすとき、

True 条件みたさないときFalse

a="jiro" if test $a == taro;then echo "OK" else echo "No" fi

実行 sh test7.sh test7.sh: 4: test $a == taro: not found No

倒そう5

絶対参照と相対参照

検索フォルダの最初に「/aaa/bbb/ccc」のように「/」があると絶対パス。これはフォルダ構造の一番上からのパス指定です。

/世界/日本/東京/世田谷/成城/daigaku.txtみたいに最初から住所書くイメージ

検索フォルダ名の最初に「aaa/bbb/ccc」のように「/」がないと相対パス。これは今いるフォルダから下を指定です。

東京ディレクトリに今いるとすると(カレントディレクトリが「東京」)、pwd/世界/日本/東京とでる状態

世田谷/成城/daigaku.txtみたいに、「/」がない場合は、/世界/日本/東京 を省略できる。

     生物

    /              \

  動物   

     /      \                            \

       サンマ

|

ポン

  • ポンのフォルダに行きたい場合

現在動物のフォルダにいる場合、「狸/ポン」とした方が早い➡相対参照を使用

現在さかなやその他他のフォルダにいる場合、「/生物/動物/狸/ポン」とする➡絶対参照を使用

また、現在ポンのフォルダにいて、サンマのフォルダに移動したい場合、「..」を使用して、一つずつ戻るよりも、絶対参照を利用し、「/生物/魚/サンマ」と移動した方が早い。

課題 

絶対パス /生物/動物/kitune /生物/動物/kitune/ポン

相対パス tanuki/ポン .. /動物/kitune

相対的に変わる

cdを忘れない

絶対パス 

相対パス

b7 me-ruokuruyatu

B7

メール送るやつ

成城大学から配布されているメールアドレスは使えません

※すべてホームディレクトリで行います

sudo apt-get install msmtp

sudo apt-get install msmtp-mta

↑インストールのコマンド↑

defaults

syslog LOG_MAIL

aliases /etc/aliases


account gmail

host smtp.gmail.com

port 587

user example1

password XXXXXXXXXXXXXXXX

from example1@gmail.com

tls on

tls_starttls on

tls_certcheck off

auth on


account default : gmail

↑これをnano等のフォルダに保存して、[.msmtprc]に名前を変更

そのあと、chmod 600 .msmtprcのコマンド

【補足】 chmodは「change mode」の略で,桁数,数字の組み合わせによって編集の権限とかを設定していru.これにより,第三者からの不正アクセスの予防に繋がる。

グーグルログイン

せきゅりてい

二段階認証プロセス

apuripasuwa-do → Gmail (名前)

echo "hello" | msmtp (自分のメールアドレス)@gmail.com

Gmail確認して、”hello”というメールが来てたらおっけー

体操4

(1-2)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4"

 

(1-3)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep JR東日本

JR東日本(赤文字)が二つ表示される。→JR東日本という文字を含む列が二行あるということ。

 

(1-4)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E "^JR東日本"

^ 正規文字 行頭のJR東日本を表示させる

二つの赤文字のJR東日本のうち最初のものが表示される

 

(1-5)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本"

交通情報から行頭のJR東日本と書かれた言葉から後50行抜き出す。 -A 行数 で単語の後ろ50行も抜き出す

 

(1-6) w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | grep -v 遅延情報はありません

事故を起こしていない路線 

-v オプション “遅延情報はありません” →遅延情報のない情報を表示、-vオプションは~を除く

|行頭のJR東日本の文字から下50行を表示|”遅延情報はありません”を除いた列を表示|

 

(1-7)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | awk '{print $1}'

路線名の一列目だけ取り出す

awkコマンドを使う {primt $} 

|行頭のJR東日本の文字から下50行を表示|その中から路線名の一列目を取り出す|

 

(1-8)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | awk '{print $1}' | sed "s/線/にゃー/g"

|行頭のJR東日本の文字から下50行を表示|その中から路線名の一列目を取り出す|“線”という文字を“にゃー”という文字に変える|

 

(1-9)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | sed "s/.*線/にゃー/g"

・「線」の前の任意文字列をにゃーに置換。「.*」は正規表現の任意の文字列(文字. の繰り返し*)。「.*線」で「線」の前の任意の文字列

|行頭のJR東日本の文字から下50行を表示|“線”という文字の前を含めた文字列を“にゃー”という文字に変える|

 

(1-10)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | awk '{print $1}' | sed "s/線/にゃー/g" | sed "s/\[.*\]//g"

・[川崎~横須賀]のような部分を削除。正規表現の任意の文字列(文字. の繰り返し*)「.*」。「\[.*\]」で[任意の文字列]を表す。\はエスケープ文字で。「[」が正規表現記号でなく文字という印

|行頭のJR東日本の文字から下50行を表示|その中から路線名の一列目を取り出す|“線”という文字を“にゃー”という文字に変える|[.*]←各括弧と中の文字を消すために、\←(バックスラッシュ)(エスケープ)を付けて消す|

 

(やってみた)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | awk '{print $1}' | sed "s/線/にゃー/g" | sed "s/(.*)//g"

()←まる括弧の中の文字を消す

(やってみる)w3m -dump "https://transit.yahoo.co.jp/diainfo/area/4" | grep -E -A 50 "^JR東日本" | awk '{print $1}' | sed "s/線/にゃー/g" | sed "s/\[.*\]//g" | sed "s/(.*)//g" 

○○にゃーという文字だけにする

 

B課題 B3~5

yahooリンク https://search.yahoo.co.jp/realtime

 

B3

wget -O- https://search.yahoo.co.jp/realtime

 

w3m -O- https://search.yahoo.co.jp/realtime

w3mを起動後の操作

終了

Q 確認せずに w3m を終了

q w3m を終了 (オプションの設定によって,終了するかどうか確認)

 

B4

sed s"/ /\n/g" realtime.1 | sed "s/,/\n/g" | grep query | awk -F":" '{print $2}' | grep -v "{" | sort | uniq

(1)sed: ファイルの「,」 を改行「\n」 に置換

(2)grep: query という文字列のある行を取り出す

(3) awk:「:」 で区切ったときの2列目(:の後を抽出)

(4)grep -v  ”{“の列除去  (5)重複削除 sort | uniq

 

w3m -dump yahoo.co.jp

・リアルタイムの画面

w3m -dump https://search.yahoo.co.jp/realtime

・リアルタイムの画面から必要なところだけ抽出、トレンドから80行したを表示

w3m -dump https://search.yahoo.co.jp/realtime | grep -A 80 トレンド 

Linuxで利用できるGrepでは、検索でヒットした行の前後の行を出力させることもできる。

前の行を出力する場合はBオプション(grep -B)を、後の行を出力させる場合にはAオプション(grep -A)を付与する。

w3m -dump https://search.yahoo.co.jp/realtime | grep -A 80 トレンド | sed "s///g"

・ w3m -dump https://search.yahoo.co.jp/realtime | grep -A 80 トレンド | sed "s/[1-9].*//g"

sed 正規表現

  • []: []の中に含まれる,いずれかの一文字
  • . : 任意の1文字にマッチ
  • * : 直前の文字が0回以上の繰り返しを表現(ex.ca*r→cr,car,caar,caaaar,...などを表現)

 

B5

sudo apt-get install nano?

体操

(1-4) cat cat test.sh echo "test" ls hako="konnitiha" hensuu="ohayou"  echo "昼は${hako}。夜は${hensuu}" pwd

(1-7)grep “ohayou” test.sh  grep 文字列 ファイル名は、 ファイルから文字列の行を表示 この場合は、ohayouという文字列が赤い文字で表示される grep "ohayou" test.sh hensuu="ohayou" 

grep -v “test” test.sh  -v オプションは除く grep -v “文字列 ファイル名 。 ファイル名から文字列の含む行を除いて表示 この場合は、testという文字列を含む行が表示されなくなる。 grep -v "test" test .sh ls hako="konnitiha" hensuu="ohayou"  echo "昼は${hako}。夜は${hensuu}" pwd

grep -v “test” test.sh | head   | パイプを使うことでコマンドを組み合わせることができる。test.sh から testの文字列を除き ( grep ), そこからさらに、 最初5行を表示 (head) grep -v "test" test.sh | head ls hako="konnitiha" hensuu="ohayou"  echo "昼は${hako}。夜は${hensuu}" pwd

ファイル一覧の「画面表示(標準出力)」の出力先をファイル出力にきりかられることを確認。

(1-8)sed “s/=./xxx/g” test.sh 「=」から 後ろがxxxに代わっていることを確認。「. 」は任意の文字列を表す正規表現sed "s/=.*/xxx/g" test.sh echo "test" ls hakoxxx hensuuxxx echo "昼は${hako}。夜は${hensuu}" pwd

grep “=” test.sh | sed “s/.=/xxx/g” > out.txt grepでout.txt に=のある行だけを表示。その結果の「.=」「任意の文字列=」

(1-9)awk -F”=“ ‘{print $1}’ test.sh #=を文字区切りとみて、= 1列目を表示。 catで表示したものの、=を区切りとした左側(一列目)を表示 awk -F"=" '{print $1}' test.sh echo "test" ls hako hensuu echo "昼は${hako}。夜は${hensuu}" pwd

awk -F” ” ‘{print $2}’ test.sh #空白(半角スペース)を文字区切りとして2列目を表示。 空白(半角スペース)を区切りとして二列目 awk -F" " '{print $2}' test.sh "test"

"昼は${hako}。夜は${hensuu}"