sed で、ファイルの中身を一括して置換する

sedを使ってファイルの中身を一括して置換する時の書き方

ファイルには

id,携帯電話番号(ハイフンなし)

[text]1,09000000000
2,09000000001
3,09000000002[/text]

という感じで入っている

これを、

[sql]update users set mobile_phone = ‘[携帯電話番号(ハイフンあり)]’ where id = [id];[/sql]

という形に変換したい。

[shell]sed -e "s/\([^,]*\),\([0-9]\{3\}\)\([0-9]\{4\}\)\([0-9]\{4\}\)/update users set mobile_phone = ‘\2-\3-\4’ where id = \1;/" 電話番号.csv[/shell]

MySQL で ビットマスク を扱う

MySQLで、テーブルの項目(type)がビットとして保存されている場合

1 真面目
2 面白い
4 硬派
8 草食系

といったtypeがあるとする

検索条件に指定する

「まじめ」のみを検索したいときは

真面目と硬派のどちらかがチェックされているデータを抽出したい場合

真面目と硬派がどちらもチェックされているデータを抽出する場合

検索結果にテキストで表示する

MySQLのlikeでの「_」の扱い

先ほど、仕事でなぜか違うデータが抽出されるんだけど…という不具合を報告され

よくよく調査したら、

という条件を見つけた。

前任者は、2001_1001_202_100とか、2001_1001_202_の後にコードが付いたデータを抽出したかったのであろうが

この条件だと2001_1001_2023というデータもヒットしてしまう。

これは、likeでは「_」は任意の一文字を意味する記号であるからである。

仕方が無いので、検索条件として使うコードの「_」をエスケープすることで解決した。

Ruby on Railsでの書き方

MySQLでCSVファイルの入出力

MySQLにはmysqldumpというダンプツールがあるが、CSVファイルでデータを出力できると、加工もしやすい。

また、CSV出力時には基本、SQL構文での出力となるため、条件指定も容易になる。

書き方としては

FIELDSオプション

  • TERMINATED BY
    項目の区切り文字を指定する
  • ENCLOSED BY
    項目を囲む文字(たとえばダブルクォーテーション)
  • ESCAPED BY
    エスケープする文字を指定(¥マークが一般的)

LINESオプション

  • TERMINATED BY
    行の末端記号(\r\n or \n)

MySQLでユーザを削除

MySQLでユーザを削除する手順

権限を削除

REVOKEで、削除したいユーザの権限を削除する

REVOKE構文について

参考に、guestユーザの権限を削除する実際の構文は

ユーザを削除