docker-compose 環境ファイル .env
docker-compose では、.env という環境ファイルを通して、デフォルトの環境変数を定義できる。
http://docs.docker.jp/compose/env-file.html
たとえば、mysql の docker コンテナを docker-compose で構築しようとしている場合、以下のような .env ファイルを用意しておけば、docker-compose.yml 内で実行時に自動的に置き換えられる。
.env
DB_NAME=bluesky DB_USER=blueskyarea DB_PASS=area DB_PORT=13306 TZ=Asia/Tokyo
docker-compose.yml
version: "3" services: mysql-db: image: mysql:8.0 environment: - MYSQL_DATABASE=${DB_NAME} - MYSQL_USER=${DB_USER} - MYSQL_PASSWORD=${DB_PASS} - MYSQL_ROOT_PASSWORD=${DB_PASS} - TZ=${TZ} ports: - ${DB_PORT}:3306
正規表現での実例パート1
1. Java Integer の変数名を含む行にマッチさせる
src 内にあるすべてのファイルを検索させている。
$ egrep -hr 'p(rivate|ublic|rotect) +Integer +[a-zA-Z_0-9]+' src private Integer speed; private Integer speed; public Integer generateNumber() { public Integer getAverage() { private Integer price; private Integer reviewNum; public Integer getPrice() { public Integer getReviewNum() { private Integer sales; public Integer getSales() {
2. ダブルクォートで囲まれた文字列を含む行にマッチさせる
[^"]* は”ダブルクォート以外の文字列”を表現している。
$ egrep -hr '"[^"]*"' src Member member = new Member(1, "hoge"); PointCard pointCard = new PointCard(1, "hoge", 2000L); assertTrue(wb.getMessage().equals("This is example.")); Whitebox.setInternalState(wb, "message", "overwritten the message."); assertTrue(wb.getMessage().equals("overwritten the message.")); assertThat(memberMock.getMemberNameAndPoint(), is("hoge_7777")); when(birthMonth.getBirthStone(anyInt())).thenReturn("not found"); when(birthMonth.getBirthStone(2)).thenReturn("amethyst"); when(birthMonth.getBirthStone(7)).thenReturn("ruby"); when(birthMonth.getBirthStone(11)).thenReturn("topaz");
3. ドル金額のみが含まれる行にマッチさせる
以下のようなテキスト(text.txt)があるとする。
082 1040.2 $56 23 $8.11 $abc $77.7 in total
^..$ で囲んでいるため、"$77.7 in total" はマッチ対象にならない。
$ egrep -i '^\$[0-9]+(.[0-9]+)?$' text.txt $56 $8.11
重複 typo を正規表現の後方参照でチェック
以下のように、不要な重複が含まれるテキスト (typo.txt) があるとする。
A typo is a mistake made in the typing process. A typo typo is a mistake made in the typing process. A typo is a a mistake made in the typing process. A typo is a mistake made in in the typing process.
このテキストに対して、以下のコマンドを使えば重複部分をピックアップすることができる。
※ただし、同じ行内で重複している場合のみ
$ egrep -i '\<([a-z]+) +\1\>' typo.txt
A typo typo is a mistake made in the typing process.
A typo is a a mistake made in the typing process.
A typo is a mistake made in in the typing process.
正規表現 HTML <HR> を例にいろいろマッチ
以下の3行が含まれるテキスト hr.txt があるとする。
# hr.txt <HR SIZE=16> <HR SIZE=16 > <HR SIZE=8> <HR>
<HR SIZE=16> にマッチさせるには?
HRとSIZEの間に1つ分の空白スペースを設けるために、+ を使う。
$ egrep -i '<HR +SIZE=16>' hr.txt <HR SIZE=16>
<HR SIZE=16 > にもマッチさせるには?
16の後に0個以上の空白スペースを設けるために、* を使う。
$ egrep -i '<HR +SIZE=16> *' hr.txt <HR SIZE=16> <HR SIZE=16 >
<HR SIZE=8> にもマッチさせるには?
1桁以上の数値にマッチさせるため、[0-9]+ を使う。
$ egrep -i '<HR +SIZE=[0-9]+ *>' hr.txt <HR SIZE=16> <HR SIZE=16 > <HR SIZE=8>
<HR> にもマッチさせるには?
<HR> 以外の部分については、オプション扱いにするため、()? を使う。
$ egrep -i '<HR( +SIZE=[0-9]+ *)?>' hr.txt <HR SIZE=16> <HR SIZE=16 > <HR SIZE=8> <HR>
正規表現で単語でマッチ
以下のようなテキストがあった場合。
My name is blue. I like mystery.
普通に "my" でマッチさせようとすると、"My" と "mystery" がマッチする。
egrep -i 'my' words.txt
もし、”My" だけをマッチさせたい場合は、\< と \> のメタ文字が使える。
egrep -i '\<my\>' words.txt
正規表現を使うなら、ターゲットテキストをよく理解する
2019年11月15日を表現する場合、以下のように色々なパターンが考えられる。
file.txt
2019/11/15 2019-11-15 2019 11/15
これらを含む行を正規表現で検索するとなった場合、どのような方法があるか。
$ egrep '2019[-/" "]11[-/" "]14' file.txt 2019/11/14 2019-11-14 2019 11/14
このように考えられうる文字を直接指定することができるが、見た目があまりよくない。
そこでもし、このテキストには似たようなパターンしか存在しないことが理解できていれば
以下のようにシンプルな正規表現でマッチさせることも可能。
$ egrep '2019.11.14' file.txt 2019/11/14 2019-11-14 2019 11/14
以下のような文字列までマッチしてしまうことになるが、このような文字列は存在しないことが予め分かっていれば気にする必要がない。
2019511314