bash 部分文字列・置換・長さ・連結・分割の文字列処理

bashのよく使う文字列処理、部分文字列・置換・連結・長さ・分割について、サンプルを交えながらまとめます。

部分文字列

文字列から部分文字列を取り出すときは、位置を指定した抽出方法か、パターンを指定による不要部分削除の方法を利用すると良いです。パターン指定には、前方一致と後方一致があるので使い分けると便利です。

位置指定

変数に対して、開始位置と長さ(省略可)を指定します。

書式
${変数名:開始位置:長さ}  # 開始位置(先頭は0)から長さ分の部分文字列
${変数名:開始位置}       # 開始位置(先頭は0)から最後までの部分文字列
使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var:5:4}
bbb/
$ echo ${var:5} #開始位置(5)から最後まで
bbb/ccc/ddd.txt.back

パターン指定

変数に対して、削除するパターンを指定します。前方・後方からの検索があり、最短マッチと最長マッチで動作が変わります。

前方一致(前から検索)

前方からの検索は#を使います。最短マッチの場合は#、最長マッチの場合は##と指定します。

書式
${変数名#パターン}  # 前方からの最短マッチを削除
${変数名##パターン} # 前方からの最長マッチを削除
使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var#*/}
aaa/bbb/ccc/ddd.txt.back # 先頭からの最短マッチで*/を削除(先頭/のみ)
$ echo ${var##*/}
ddd.txt.back             # 先頭からの最長マッチで*/を削除(ddd.txtの直前まで)

後方一致(後から検索)

前方からの検索は%を使います。最短マッチの場合は%、最長マッチの場合は%%と指定します。

書式
${変数名%パターン}  # 後方からの最短マッチを削除
${変数名%%パターン} # 後方からの最長マッチを削除
使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var%.*}
/aaa/bbb/ccc/ddd.txt # 後ろからの最短マッチで.*を削除(.backのみ)
$ echo ${var%%.*}
/aaa/bbb/ccc/ddd     # 後ろからの最長マッチで.*を削除(.txt.back)
応用
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var%.*}.new
/aaa/bbb/ccc/ddd.txt.new # 拡張子の変更

文字列置換

文字列に対して置換を行う場合は、検索パターンと置換後の文字列を指定します。置換方法には、見つかったパターンのうち最初だけ置換する方法と、見つかったパターン全てを置換する方法とがあります。前者は/を指定し、後者は//を指定します。

書式
${変数名/パターン/置換}  # 最初にみつけたパターンを置換
${変数名//パターン/置換} # 見つかった全てのパターンを置換
使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var/./_}
/aaa/bbb/ccc/ddd_txt.back # 先頭から最初に見つかった.を_に置換
$ echo ${var//./_}
/aaa/bbb/ccc/ddd_txt_back # 先頭から見つかった全ての.を_に置換

文字列長さ

文字列長さは、${#変数}で取得します。

使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${#var}
25

文字列連結

文字列連結は、対象となる文字列に対して、文字列リテラルまたは文字列の入った変数名を続けて書くことで連結することができます。

使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo ${var%.*}.new     # 後方から削除した文字列に対する「.new」の連結
/aaa/bbb/ccc/ddd.txt.new # 結果として拡張子の変更が可能

関連記事

シェルスクリプト while 条件と繰り返し スクリプトの書き方
シェルスクリプト for 単純な繰り返し スクリプトの書き方
シェル スクリプト ファイル存在チェック・空のファイルチェック

文字列分割

文字列分割は、cutawkなどのコマンドを連結することで、分割後のキーワードを抽出することができます。cutでは-dオプションでセパレータを指定し、awkでは-Fオプションでセパレータを指定しています。分割後のキーワードの位置は3番目を指定しています。

使い方
$ var="/aaa/bbb/ccc/ddd.txt.back"
$ echo $var | cut -d/ -f3
bbb
$ echo $var | awk -F/ '{print $3}'
bbb

実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。



ピックアップ記事

  1. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…
  2. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…
  3. R plot 重ねる方法3パターン サンプルでわかるRの使い方

    Rでグラフ (plot) を重ねる方法は、「単純な追加」「図に重ねて描画」「濃淡で重なり表現」の3…

人気記事

  1. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  2. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  3. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…