memorandum

IT技術の習得を記録します

コミットをまとめる

git rebase -i --keep-empty --autosquash $(git show-branch --merge-base master HEAD)

vimに以下のような状態で開かれる

pick 05eb1e4 test2rb
pick 7dc17cc add test.rb

# Rebase 7802bc5..7dc17cc onto 7802bc5 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#

pickの部分を以下のように変更 (まとめたいコミットをpick→fにかえる) 一行目は残しておくのでpickのまま

pick 05eb1e4 05eb1e4 test2rb
f 7dc17cc add test.rb

vimで直前のコミットメッセージを修正

git commit --amend
git push --force-with-lease

CSVファイルの中身を置換する sed

sedは与えられた文字列を,ルールに従って変換するコマンド
置換したいと思って調べたら、かなり色々できるようです

とりあえずよく使用するであろうCSVの中身の置換を覚えてみる

sed -e s/置換条件/置換文字/

list.csvの株式会社を(株)にしてlist_new.csvに書き出す

sed -e "s/株式会社/(株)/g" list.csv > list_new.csv

list.csvの株式会社を(株)にして上書きする

sed -i -e "s/株式会社/(株)/g" list.csv


さらに詳しく、これだけでも結構覚えごたえがある・・・

sed -e "s/aaaa/bbbb/"       # 行で最初に出てきた'aaaa'を'bbbb'に置換
sed -e "s/aaaa/bbbb/g"      # 入力の全行に渡って置換  G = Global
sed -e "s/^aaaa/bbbb/"      # 行頭(^)に'aaaa'のもの  aaaabbbb => bbbbbbbb
sed -e "s/aaaa\$/bbbb/"     # 行末($)に'aaaa'のもの。$は\でescape  bbbbaaaa => bbbbbbbb
sed -e "s/~/bbbb/"          # 行頭に'bbbb'を追加   aaaa  => bbbbaaaa
sed -e "s/\$/bbbb/"         # 行末に'bbbb'を追加  aaaa => aaaabbbb
sed -e "s/.*/abcd/"         # すべての行を'abcd'に置換 
sed -e "s/aa.*bb//"         # aa*bbを削除

エラー回避 rescue

rescueを使うことによって、エラーを回避して処理ができる
beginとrescueの間で実行する処理で何らかのエラーが発生しても処理を中断しないようになる

begin
  例外を発生させる可能性のある処理
rescue
  例外が起こった場合の処理
end

rescueに続けて変数名を指定、上がってきた例外が指定した変数に代入される

begin
  例外が起こる可能性のある処理
rescue => 例外オブジェクトが代入される変数
  例外が起こった場合の処理
end

raiseで意図的に例外を発生させてみる
raiceは検証に便利
数に型を渡さないと、 RuntimeErrorを発生させる
RuntimeError : 特定の例外クラスには該当しないエラー

begin
  raise 
rescue => e
  p "error"
end

結果

"error"

rescueのあとにクラスを指定すると、その例外のときのみ処理を中断しないようになる

begin
  raise StandardError
rescue StandardError => e
  p "StandardErrorが発生していますが処理は中断していません"
end

結果

"StandardErrorが発生していますが処理は中断していません"

指定した以外のエラーが発生すると

begin
  raise ArgumentError
rescue ZeroDivisionError => e
  p "ZeroDivisionErrorが発生していますが処理は中断していません"
end

結果

csv_test.rb:2:in `<main>': ArgumentError (ArgumentError)||<


例外オブジェクトからメソッドを呼んで、例外に関する情報を取得できる。

class ... 例外の種類
message ... 例外のメッセージ
backtrace ... 例外の発生した位置に関する情報($@ = $!.backtrace)

begin
  raise StandardError
rescue StandardError => e
  p "StandardErrorが発生していますが処理は中断していません"
  p e.class
end
"StandardErrorが発生していますが処理は中断していません"
StandardError

全角英数字を半角英数字に 半角カナを全角カナに nkfで変換

encode_halfwidth = NKF.nkf('-m0Z1 -W -w', "AABBBBBAAアアアああアアアアアアアアアアアア")

=>

AABBBBBAAアアアああアアアアアアアアアアアア 

-m[BQN0] MIME(電子メール用のフォーマット)を解読する

エンコーディングの変換のみをするならば以下を指定しておくべき

-m0 MIME の解読を一切しない。

-Z[0-3] X0208 のアルファベットといくつかの記号を ASCII に変換する

-Z -Z0 X0208アルファベットといくつかの記号を ASCII に変換する
-Z1 X0208空白(いわゆる全角空白)を ASCII の空白に変換する
-Z2 X0208空白(いわゆる全角空白)を ASCII の空白2つに変換する
-Z3 X0208の>、<、”、&、を '>', '<', '"', '&' に変換する

X0208(全角) ASCII(半角)

出力フォーマットの指定 -j -s -e -w -w16

-j ISO-2022-JP (7bit JIS) を出力する(デフォルト)
-s Shift_JIS を出力する
-e EUC-JP を出力する
-w UTF-8 を出力する(BOMなし)
-w 16 UTF-16 LE を出力する

入力フォーマットの指定 -J -S -E -W -W16

-J 入力に JIS を仮定する
-S 入力に Shift_JIS と X0201片仮名(いわゆる半角片仮名)を仮定する。-xを指定しない場合はX0201片仮名(いわゆる半角片仮名)はX0208の 片仮名(いわゆる全角片仮名)に変換される
-E 入力に EUC-JP を仮定する
-W 入力に UTF-8 を仮定する
-W16 入力に UTF-16LE を仮定する

mysqlで実行した命令文の出力結果をクリップボードにコピー

developmentというデータベースにlist.sqlを実行しre.csvに出力

mysql -u root development < list.sql > re.csv


以下で出力結果をクリップボードにコピー

pbcopy < re.csv

そのまま
スプレッドシートなどに貼りつけると、綺麗にペーストされる

git で管理する必要のないファイルは .gitignoreに記入する

$ cat .gitignore
*.csv
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/spec/examples.txt
/test/tmp/
/test/version_tmp/
/tmp/

# Used by dotenv library to load environment variables.
# .env

## Specific to RubyMotion:
.dat*
.repl_history
build/
*.bridgesupport
build-iPhoneOS/
build-iPhoneSimulator/
#csvファイルはいらない
*.csv
# /.configフォルダは要らない
/.config

git 基本操作

ブランチを作ってそこにマスターから移動する

git checkout -b ブランチ名

addしてcommitしてpushをする

git add 追加したいファイル
git commit -m "コメントを書く"

リモートにはじめてあげるときは下記の通りにpushする

git push --set-upstream origin ブランチ名

2回目以降は

git push ブランチ名

ブランチを消す

git branch -d ブランチ名

ステータスの確認

git status

変更箇所の確認

git diff

addした後の変更箇所の確認

git diff —cached