正規表現で grep 検索を便利に その4

今回は、メタキャラをつかってみようと思います
とくに一番使う * を使ってみます
* は端末で一番使うことが多いと思います
例えば grep *.txt
として .txt の拡張子のものを調べたりといろいろ活用できます
ただし、正規表現になると意味が変わっていますので要注意です
^が行頭だったのに、正規表現にしたら 否定になっているように
*も、~を含むすべて、というような意味合いから
正規表現では
直前の文字、もしくは0回以上のパターンの繰り返し
という意味になっています
0回もカウントしてしまうので、空文字も含みます
まずは、わかりやすく、サンプルを用意しましょう
vi sample.txt
でファイルを作成し
内容を
aa lx
laaaax
lbx 13
11 lax
345
4444456
laas
lbbx
という内容にします
この中から、l で始まりaの繰り返しが何個からあり
最後はx で終わるものを検索するには
grep “laa*x” sample.txt
とします
結果は
laaaax
11 lax
となります
間違えて
grep “la*x” sample.txt
とすると、空白入りの行がでてきます
この応用で、数字だけの行をだせます
grep “^[0-9][0-9]*$” sample.txt
これで
345
4444456
となります
. と * を組み合わせて任意の文字列とマッチさせるというのが
よく使われるそうです
ただし、1個以上の任意の文字列にするなら
.*
ではなく
..*
としますのでご注意

正規表現で grep 検索を便利に その3

サーバー設定に便利になりそうだったので、
正規表現をあれこれやっていますが
文字クラスの範囲指定が思いつかないので
日経Linux 2011-03 の記事を参考にします
そして、今回はサンプルファイルとして、costomer.txt
というファイルを使います
内容は
1:山田太郎:男:43:東京
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
4:千葉信夫:男:16:東京
5:秋山敬一郎:男:44:秋田
101:藤本信:男:40:東京
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
というものです
ここから、東京に住んでいる人だけを調べます
grep “:[東].$” costomer.txt
これを実行すると
1:山田太郎:男:43:東京
4:千葉信夫:男:16:東京
101:藤本信:男:40:東京
となります
$ は行末、そして . は任意の文字数になります
今回は :[東].$ なので、
意味は行末より2つ左の文字で、東を含むものを検索するという意味になります
また、通常は ^ は行頭を意味しますが
[] の中に記述すると、~でないという意味になります
例えば
grep “:[^東].$” costomer.txt
とすると、
2:井上直子:女:19:埼玉
3:山本真一:男:43:福岡
5:秋山敬一郎:男:44:秋田
102:加藤純子:女:35:千葉
103:福岡勲:男:41:香川
104:桂井昭宏:男:53:福岡
というように、東京に住んでいない人がでます
また、年齢で検索するという場合には
grep “:[3][0-9]:” costomer.txt
とすることで、30代の人を割り出すこともできます
最初の [3] で3を含む
そして
[0-9] で0~9までの数値、つまりこれで30代になります
もちろん複数指定も可能です
grep “:[13][0-9]:” costomer.txt
とすれば、10代と30代がでてきます
2:井上直子:女:19:埼玉
4:千葉信夫:男:16:東京
102:加藤純子:女:35:千葉
あまり使い道はないように見えますが
テキストエディタで、メモしたときには検索するときに役立つと思います
例えば、お小遣いの記録とかには使えそうです
ちなみに、指定する時には名前付文字クラスで代用できます
主なものとして
[:alnum:]
すべてのアルファベット、10進数を示す
つまり
0-9A-Za-z を指定したのと同じ意味
[:alpha:]
すべてのアルファベット
つまり
A-Za-z と同じ
[:blank:]
空白文字
これは
スペースやタブなど
[:digit:]
10進数の文字
0-9 と同じ
[:lower:]
アルファベットの小文字
a-z と同じ
[:upper:]
アルファベットの大文字
A-Z と同じ
[:space:]
空白文字
こちらは、スペース、タブ、そして改行
[:xdigit:]
16進数につかう文字
0-9A-Fa-f と同じ
ちなみに、使うときには
[] で囲って
[[digit:]] というように使います
今回のように10~30代を調べるには
grep “:[13][[:digit:]]:” costomer.txt
とします
もちろん意味は変わらないので
2:井上直子:女:19:埼玉
4:千葉信夫:男:16:東京
102:加藤純子:女:35:千葉
と表示されます

正規表現で grep 検索を便利に その2

引き続き、正規表現をつかった grep の操作です
今回は、行頭をしめす ^
そして行末を示す $
これらを使った便利な検索を行っていこうと思います
まずは ^ からです
設定ファイルに追記し、記述があっているかわからない
もしくはエラーメッセージで何行目にエラー
となったときに、ファイルを開かずとも
該当するところを grep で表示できます
例えば
SetEnvIf Request_URI default.ida no_log
SetEnvIf Request_URI cmd.exe no_log
SetEnvIf Request_URI root.exe no_log
SetEnvIf Request_URI Admin.dll no_log
SetEnvIf Request_URI NULL.IDA no_log
を追記し、その確認をしたいのなら
行頭が SetEnv で始まっているので、今回の ^を使います
$ grep -n “^SetE” /etc/httpd/conf/httpd.conf
511:SetEnvIf Request_URI default.ida no_log
512:SetEnvIf Request_URI cmd.exe no_log
513:SetEnvIf Request_URI root.exe no_log
514:SetEnvIf Request_URI Admin.dll no_log
515:SetEnvIf Request_URI NULL.IDA no_log
これで行番号もでますので、ミスがあれば
sed コマンドで置き換えすれば修正できます
また、行末の単語で検索すれば、かなり便利に検索できます
例えば
Webサーバー構築(Apache)
にあるように、最後の文字が80ならば
$ grep -n “80$” /etc/httpd/conf/httpd.conf
133:#Listen 12.34.56.78:80
134:Listen 80
262:ServerName www.example.com:80
980:#NameVirtualHost *:80
というように、 vi でテキストを開いて / で単語をいれて検索するよりも
より効率的に調べることができます

正規表現で grep 検索を便利に

いろいろと検索するときに使える
grep コマンドですが、オプションや正規表現を使えば
さらに便利になります
とくに、設定スクリプトをつくりたいときに使っています
まずは、文字の検索です
grep “探したい文字” ファイル名
これで、ファイルのなかから任意の文字をさがせます
例えば
SELinuxの設定を無効にするため、
enforcing という場所がどこにあるかをみるには
grep “enforcing” /etc/sysconfig/selinux
で見れます
ただし、該当する行が全部でます
実行結果は
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
となりました
“” で囲んであるのは、*などのメタキャラを含む場合に
シェルに展開されないようにするためです
続いて -c オプションをつけて、該当する行がいくつあるか数えます
今回は SELINUX とかかれている行の数を表示します
grep -c “SELINUX” /etc/sysconfig/selinux
4
これで該当するのは4行ということがわかりました
また、OR検索をするには
-e オプションをつけます
これはいくつか連続してできますが、絞り込みにはなりません
例えば
enforcing と SELINUX を含む行をだすには
grep -e “SELINUX” -e “enforcing” /etc/sysconfig/selinux
としますが
絞り込めていません
両方のうち、どちらかを含む行がでてきます
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
SELINUXTYPE=targeted
このため、絞り込みをするには、一度 grep で検索した結果を
パイプでさらに検索すれば絞り込み可能になります
grep “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
これで
SELINUX=enforcing
となり、目的どおりの絞り込みができました
さらに -n オプションをつければ、行をしらべ
sed コマンドで簡単に書き換えできます
このときに注意するのは
最初のgrep コマンドで -n オプションをつけてから
絞りこみするということです
正解:$ grep -n “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
7:SELINUX=enforcing
誤り:$ grep “SELINUX” /etc/sysconfig/selinux | grep -n “enforcing”
2:SELINUX=enforcing
このように、後にオプションをつけると行が変わってしまうのは
絞り込んだあとで行を数えているからです
このため。本来なら原文の7行めになるはずが
絞り込んだら2行めなので、2行めと表示
というようになってしまいます
sed などで一気に改造したいときには、調べるときに
こういった順番の誤差に気をつけましょう

月曜日はIMMのポジション量発表

IMMのポジション量によれば、一番ロングが積もっているのがポンド
ちなみに円はショートになりつつあるため、円買いの可能性あり
ポンドに関しては、史上最大までもう少しだけど、ドル円がはっきりしないと危険
あとはスイスだけど、これは中東不安からきてるとのこと
よくある有事のスイスフラン買い
金融危機、かつてのリーマンショックのときに、対スイスフランはすごい上昇
カナダは原油高が要因でロング拡大
こちらも中東不安により原油高になり、結果カナダロング拡大につながるようです
ただし、先行きは微妙
NZドルは、金利が人気だけど、金利の先行きが微妙
むしろ、食料輸出国の強みと、最近の食料価格高騰による景気拡大が理由でロング拡大
豪ドルが一番わかりにくく
銀行格下げや、洪水被害、があるけど金利差が人気、そして資源価格高騰が理由でロング拡大らしい
ただ、欧米の金利があがると、金利差はなくなり、レバトリになるリスクもあるかもしれません
毎週 月曜日にはIMMのポジション量発表になりますので
ある程度の参考にはなります
史上最大のロングや、ショートとでてきたら、要注意です
ちなみに、IMMのポジション量は対ドルになりますので
クロス円と間違えないようにしましょう

シェルスクリプトで chown

シェルスクリプトで
chown コマンドを使うようにしてみました
test.txt というファイルをつくり、中身を適当に用意します
vi test.txt
で作成し
aaaaa
bbbbb
という内容にします
今回は、所有権の変更なので、中身は適当です
通常、chown ユーザ名 ファイル名
となりますが
今回は
vi chowntest.sh
でスクリプトを作成してみました
#!/bin/bash
echo “変更するユーザ名を入力”
read name
chown $name. test.txt
という内容です
これを
sh chowntest.sh
とすれば
所有権が入力したユーザ名に変わります
ただし、存在しないユーザを入力するとエラーになります
このスクリプトを使えば、
よくある
chmod ユーザ名. /var/www/html/
のときに簡単に設定できそうです
(通常は root 権限なので、変更は必須ですから)
構文の中にある read は
キーボードからの入力をするために使っています
シェルスクリプト :: read コマンド
そして
【 文字列の入力 】
を参考にしてみました

fedora13 64bit へ Flash plugin

fedora13 64 bit へ flash plugin を入れてみました
参考サイトは
Flash Player “Square” Preview Release 2 on Fedora 13 64bit
Adobe Labs
から
ownload plug-in for 64-bit Linux (TAR.GZ, 4.1 MB)
をダウンロードします
他にもセッティングできるように
cp $HOME/ダウンロード/flashplayer10_2_p3_64bit_linux_111710.tar.gz
でファイルを Dropbox へコピー
その後、
tar zxvf $HOME/Dropbox/flashplayer10_2_p3_64bit_linux_111710.tar.gz -C $HOME/.mozilla/plugins/
を実行することで
$HOME/.mozilla/plugin
へファイルをコピーします
ちなみに、-C オプションは、指定したディレクトリに
ファイルを展開するというものです
これを
vi setup_fedora13_64.sh
で スクリプトを作成し、内容を
#!/bin/bash
tar zxvf $HOME/Dropbox/flashplayer10_2_p3_64bit_linux_111710.tar.gz -C $HOME/.mozilla/plugins/
としてDropbox へ一緒に保存しておけば
ほかの fedora13 64bit へも簡単に適用できます
ただし、セットアップしたら、firefox を再起動しましょう
これで 64bit でも Youtube が見れます

wireshark

サーバー公開とセキュリティの勉強のため、
パケット関連の勉強をはじめようと思います
手始めに、パケット解析などを行えるツール
Wireshark を使ってみます
今回、実験するのは
ubuntu 10.10 です
sudo apt-get -y install wireshark
でインストールできます
これで、準備はできたのですが、起動するときには、
一般ユーザではなく、管理者権限で実行します
端末を開き、
sudo wireshark &
もしくは
sudo su
wireshark &
と実行することで、起動できます
一般ユーザでも起動できたのですが、
解析するインターフェースを選ぶことができませんでした
管理者権限で起動したら、調べたいインターフェースを選択します
すると、キャプチャが開始されますので、
これでネットワーク監視が可能になります
とはいっても。なれないとまったく意味が分かりません
Source はデータの転送元
Destination は データの転送先になるようです
Protocol は TCP や UDPなどの通信プロトコル
info には詳細情報が載ります
このinfo に、ネットに接続して閲覧しているときの情報がでます
PNG などの文字があれば、画像を閲覧していることがわかります
このときにキャプチャした画像は
File > Export > Objects > HTTP で表示されます
この画像を保存しておくには
Save All を選択し、任意の場所を選び、ディレクトリ名を
名前 のところの欄へ入力し。OKを押します
私の場合は、
/home/wiki/ドキュメント

samplechap
というディレクトリ名で保存しました
ただし、すべてのファイルを保存することはできませんでした
画像関連については、ほぼ問題なく保存されていると思われます
Wireshark を終了するときに
Quit without Saving
を選べば、キャプチャ内容を保存せずに終了します
Wireshark に関しては
ネットワークエンジニアを目指して
というサイトに詳しい説明が載っていましたので
参考にしながら勉強していこうと思います

Android アプリ作成(タッチ処理編)その4

Android アプリ作成(タッチ処理編)その3
の続きになります
まず、
public class test2Activity extends Activity {
の下に
SoundPoll sp;
int sound;
を記述し、
赤いラインがでているので、
SoundPoll のところへカーソルを持っていって
import SoundPoll (Android widget)
をクリックし、インポートします
int sound は音声ファイルの読み込みに使うための変数です
次に、
sp = new SoundPool(1,AudioManager.STREAM_MUSIC, 0);
を記述します
例のごとく、自動的に候補がでますので
実際にはかなり楽に書き込めます
続いて
sound = sp.loa
まで書き込むと候補がでてきますので
load(Context context, int resid, int priolity); int – SOundPool
を選択すれば自動的に書き込まれます
context を this へ、
resid を R.raw.dummy-message
と指定しようとしたのですが
[2011-02-19 00:07:17 – Test2] res/raw/dummy-message.wav: Invalid file name: must contain only [a-z0-9_.]
となるため、ファイル名を変更します
Eclipse の raw > dummy-message.wav
を右クリックし
Refactor > Rename 
もしくは
Shift + Alt + R
を押してファイル名を変更します
ファイル名を dum.wav
にして
resid を R.raw.dum
pliority を 1
へ変更します
そして
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
}
});
を追加します
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
は、音声再生の設定です
play()
の中の数値ですが、左から
サウンドの番号
左スピーカーの音量 (0.0~1.0)
右スピーカーの音量 (0.0~1.0)
優先度 (0が最優先数値になる)
再生速度 (1が標準。2で倍速、0.5で半分)
となります
かなりわかりにくくなったので、以下が
main.xml の全文になります
-------------------------------------------------------
package jp.co.nikkeibp.test2;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class test2Activity extends Activity {
SoundPool sp;
int sound;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sp = new SoundPool(1,AudioManager.STREAM_MUSIC, 0);
sound = sp.load(this, R.raw.dum, 1);
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
}
});
}
}

--------------------------------------------------—-

Android アプリ作成(タッチ処理編)その3

Android アプリ作成(タッチ処理編)その2
をさらにカスタマイズし、音がでるように改造します
参考資料は、日経Linux 2011-03 です
新しく res の下に raw というディレクトリを作成します
まず
res ディレクトリの上で右クリックし
New > Folder
で設定ウィンドウがでてきますので
Folder name: の欄へ raw と入力し
Finish
をクリックします
これで、ディレクトリが作成されます
ちなみに、英語なのは
私の場合
DropBox とスクリプトで開発環境
にあるように、スクリプトでインストールしたときに
日本語化処理を行っていないためです
今後、英語のサイトなどを使うときの練習として
なるべくプログラミングは日本語化せずにできそうなものは
英語にしてみようと思っています
幸い、Eclipse は日本語化されて説明されていることが
多いので単語を置き換えながら
進めれば、なんとかなります
習慣化してくれば、気にならなくなります
日経 Linux 2011-03では don.wav
というファイルを使っているそうですが、
ubuntu には入っていませんし、再現性の問題から
デフォルトで入っている音源を使おうと思います
サンプルの音声が
/usr/share/sounds/
の中にありますので、好きなディレクトリの中のファイルから
使うことにします
今回は
ubuntu 10.10
の中の
/usr/share/sounds/speech-dispathcer/
の中にあるダミーメッセージファイルになる
dummy-message.wav
を使います
これをドラッグ&ドロップして、Eclipse の
raw ディレクトリにもっていきます
これで、音声ファイルが用意できましたので
それでは、引き続き java コードの改造をしていきます
今回、追加するのは
SoundPool クラス
(ゲームやボタンクリックの効果音など
 比較的短い音声再生につかうらしいです)
load メソッド
(音声ファイルの読み込みに使用)
playメソッド
(音声ファイルの再生に使用)
今回は、変更するために、いちど
setContentView(R.layout.main);
の下からの部分を切り取ります
切り取るのは
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView=(TextView)findViewById(R.id.TextView01);
textView.setText(“ボタンをクリックしたよ”);
}
});

の部分です
念のため、後で直せるように
アプリケーション > 
アクセサリ > Tomboy メモ
で新しいメモを開き、
張り付けておきます
これで、最悪の場合、この部分を張り付けて元に戻します
これで、バックアップもできたので
安心して機能を追記できます