ドットインストールをまとめる(sed入門)
Contents
sed入門
#01 sedとはなにか?
- 概要
- テキスト処理ツール
- 知識
- Unixコマンド
- 正規表現
- vim
- 環境
- GNU sed 4.1.5
#02 はじめてのsed
行の削除
3行目を消すには ’3d’ を指定する。
- -e は expression
$ sed -e '3d' sample.txt
-e を消してもOK
$ sed '3d' sample.txt
ファイルを直接編集するには -i オプションをつける
$ sed -i -e '3d' sample.txt
バックアップファイルも作成できる。
(この場合、変更された sample.txt と変更前の内容をもつ sample.txt.bak が作成される。)
$ sed -i.bak -e '3d' sample.txt
別ファイルに書いたコマンドを実行することもできる。
以下の内容のex1.sedファイルがある時
$ cat ex1.sed
3d
-f オプションを指定するとファイルの内容の処理を実行する。
$ sed -f ex1.sed sample.txt
#03 パターンスペースについて理解しよう
sedの命令はaddressとcommandから構成される。
3dの例では以下の構成
address | command |
---|---|
3 | d |
sedが処理するときはパターンスペースという一時的なバッファを使う。
処理の流れは以下の通り。
- fileから一行読み込んでパターンスペースに格納
- addressにマッチ? → command実行!
- パターンスペースを表示
#04 アドレスを使いこなそう
3行目以外を削除
- ! で否定
$ sed -e '3!d' sample.txt
1行目と3行目を削除
- 複数指定するときは ; で区切る。
$ sed -e '1d;3d' sample.txt
1から3行目を削除
- 範囲の指定は , カンマで区切る。
$ sed -e '1,3d' sample.txt
1行目から2行おきに削除
- ~で指定する。
$ sed -e '1~2d' sample.txt
最終行を削除
$で最終行を表す。
最終行のみ削除
$ sed -e '$d' sample.txt
3行目から最終行まで削除
$ sed -e '3,$d' sample.txt
正規表現を使う。
/ で囲む。
iで終わる行を削除
$ sed -e '/i$/d' sample.txt
アドレス省略するとすべての行が対象になる。
全行削除
$ sed -e 'd' sample.txt
#05 p/a/iコマンドを使ってみよう
p(print)
指定した行を印字する。
以下の例では指定した行が2回表示される。
$ sed -e '3p' sample.txt
-n オプション(パターンスペースの表示抑止)と組み合わせると、指定した行のみの表示になる。
$ sed -n -e '3p' sample.txt
#06 yコマンドで置換してみよう
yコマンドは1文字づつの置換
全行で小文字のtを大文字Tにする。
$ sed -e 'y/t/T' sample.txt
複数の文字を対象にする場合(t→T、o→O)
- 一文字の置換なので、toをTOにするのではない。
- 順序も対応している。
$ sed -e 'y/to/TO' sample.txt
#07 sコマンドで置換してみよう
sコマンドは文字列の置換
単純な指定では最初にマッチした1つのみ
$ sed -e 's/apple/Apple/' sample.txt
フラグ g をつけるとすべてが対象になる。
$ sed -e 's/apple/Apple/g' sample.txt
フラグ 2 をつけると2つ目にマッチした文字列のみが置換される。
$ sed -e 's/apple/Apple/2' sample.txt
フラグ i をつけると大文字小文字を区別しない。
- フラグは複数指定してもよい。
$ sed -e 's/apple/Ringo/ig' sample.txt
正規表現を使用してもよい。
$ sed -e 's/[aA]pple/Ringo/g' sample.txt
#08 &や1を使って置換してみよう
- マッチした文字列を置換する文字列に使いたい場合
- (1を置換して【1】にするとか)
マッチした文字列は & で使用できる。
$ sed -e 's/[1-2]/【&】/' sample.txt
複数マッチする場合は \1 , \2 ,,, \n で使用できる。
順序を入れ替える例
- () で囲むことで複数の文字列を指定できる。
- () はエスケープが必要なので注意
$ sed -e 's/\([1-2]\) \(.*\)/\2 【\1】/' sample.txt
#09 ホールドスペースを使ってみよう(1)
複数行にまたがる処理を実行したい場合に使用する。
- ホールドスペース
- パターンスペースのさらに奥にあるバッファのイメージ
コマンド
- h
- hold パターンスペースの中身をホールドスペースに退避する。
- g
- get ホールドスペースの中身をパターンスペースに戻す。
- x
- exchange 両者を交換する。
- 例
style.css
#main { color: red; font-weight: bold; font-size: 14px; background: green; }
ex2.sed
# color change /color: / { h s/color: /background: / x } /background: / { g }
$ sed -f ex2.sed style.css
#10 ホールドスペースを使ってみよう(2)
処理の解説
1行目 パターンスペースの内容を表示
2行目 /color: / にマッチするので処理を実行
- 処理実行前の状態
pattern space color: red; hold spase
- ホールドスペースにパターンスペースの内容を格納
pattern space color: red; hold spase color: red;
- パターンスペースで置換を実行
pattern space background: red; hold spase color: red;
- パターンスペースとホールドスペースを交換
pattern space color: red; hold spase background: red;
- パターンスペースの内容を表示
3,4行目 パターンスペースの内容を表示
5行目 /background: / にマッチするので処理を実行
- 処理実行前の状態
pattern space background: green; hold spase background: red;
- ホールドスペースの内容をパターンスペースに戻す。
pattern space background: red; hold spase background: red;
- パターンスペースの内容を表示
6行目 パターンスペースの内容を表示
Androidの内部動作
はじめに
SL4AでAndroidでPythonが使えることを知り、いまさらながらAndroidの内部構造(Dalvik VMなど)について調べてみたメモ
参考
- Dalvik VM Internals
- Dalvik仮想マシンのアーキテクチャ
- Androidアプリの内部動作に関する情報(1)
- Androidアプリの内部動作に関する情報(2)