とある技術者の外部記憶媒体

知っておかなきゃいけないことが多すぎて頭の記憶領域が慢性的に不足気味。
そんな技術者の備忘録です。

検索・切り出しのメソッド

[] 文字列の検索を行う。指定方法により返値が異なる。
slice []と同じ。※1
split 引数の文字列、正規表現で分割した配列を返す
include? 指定文字列が含まれる場合はtrueを返す
index 指定文字列、パターンを右方向に検索しマッチした位置を返す
rindex indexを左方向に実行する
match 指定した正規表現にマッチした場合はMatchDataオブジェクトを返す
scan 指定した正規表現にマッチした文字列の配列を返す
  • ※1:!をつけると破壊的メソッドになる
 sliceの実行例)
 str="abcdefg"
 str.slice(2)     #=> 2文字目があればその文字コード、なければNilを返す
 str.slice(0..3)  #=> 1-4文字目を返す(先頭は0となる)
 str.slice(1..-1) #=> 2文字目から最後までを返す(最後は-1となる)
 str.slice(/cde/) #=> 正規表現にマッチした箇所、なければNilを返す
 str.slice("de")  #=> 指定文字列にマッチした箇所、なければNilを返す

変更・置換のメソッド

chop 末尾の一文字を削除した文字列を返す。※1
chomp 末尾の改行コードを削除した文字列を返す。※1
strip 先頭と末尾の空白文字を削除した文字列を返す。※1
lstrip 先頭の空白文字を削除した文字列を返す。※1
rstrip 末尾の空白文字を削除した文字列を返す。※1
sub 第1引数の正規表現にマッチした箇所を第2引数で1カ所のみ置換。※1
gsub subと同じだがマッチした全ての箇所を置換。※1
tr 第1引数のパターンにマッチした箇所を第2引数で置換。※1
tr_s trの動作に加えて重複文字を1文字に圧縮。※1
delete 引数のパターンにマッチした箇所を削除。引数は複数指定可能。※1
squeeze 引数のパターンにマッチした文字が複数並んでいるときは1文字に圧縮。※1
replace 引数の文字列でレシーバを置き換える。※2
capitalize 先頭文字を大文字、他を小文字にした文字列を返す。※1
downcase 全て小文字にした文字列を返す。※1
upcase 全て大文字にした文字列を返す。※1
swapcase 大文字と小文字を入れ替えた文字列を返す。※1
reverse 文字列を逆順した結果を返す。※1
  • ※1:!をつけると破壊的メソッドになる
  • ※2:破壊的メソッド

連結のメソッド

"+" 文字列を連結した結果を返す
"*" 指定した数値だけ繰り返す結果を返す
"<<" 文字列を連結する。※2
concat 文字列を連結する。※2
  • ※2:破壊的メソッド

文字列の長さを取得するメソッド

length 文字列のバイト数を返す
size 文字列のバイト数を返す
count 引数のパターンにマッチする文字数を返す

変換メソッド

to_i 数値に変換した結果を返す。空文字の場合は0を返す
to_f 浮動小数に変換した結果を返す。空文字の場合は0.0を返す
to_s 文字列に変換した結果を返す
to_sym シンボル値に変換した結果を返す
hex 文字列を16進数と見なし数値に変換した結果を返す
oct 文字列を8進数と見なし数値に変換した結果を返す
  • to_i、to_f、hex、octは変換できない文字があれば、そこまでを変換し、それ以降は無視する。

複数行の値をコマンドに渡したりする場合にはヒアドキュメントを使います。

 command << END   <== ENDは任意の文字列
 .....
 END              <== 最初と同じ文字列を指定

ENDの前に'\'を入れるとドキュメント内の変数がクォートされます。

'<<-'にするとドキュメント部分の行頭のタブが入力されていないものとされます。

コマンドへの入力をヒアドキュメントとし、その結果の標準出力やエラー出力をファイルにリダイレクトするには次のようにします。

 command << EOF >{標準出力ファイル} 2>{エラー出力ファイル}
 ......
 EOF

パイプに渡すときは以下のようにします。

 command << EOF | command2
 ....
 EOF

シェルスクリプトの中でファイルの内容を入力する場合はexecコマンドとreadコマンドを使います。

 OLDIFS=$IFS        <= $IFSの値をバックアップしておく
 IFS=               <= $IFSの設定をクリア
 exec < file_name   <= ファイルを読み込む
 while read LINE    <= readで一行ずつ読み取った値を変数$LINEに代入
 do
   echo $LINE
 done
 IFS=$OLDIFS        <= $IFSの値を元に戻しておく

readコマンドで読み取ると$IFSの設定に従い単語に区切られます。(デフォルトは空白、タブ、改行コード)

そのため、空白やタブで区切らずに1行丸ごと読み取りたいときは、上のようにして$IFSの設定をリセットしてから読み取ります。

このページのトップヘ