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

bash 算術計算 書き方
シェルスクリプトを書いているとき、計算式が使えると便利なことがあります。 ファイルの残りの行数を表示したいな行毎に項目を足して合計を表示したいな入力したデータを計算して処理に使いたいな いろいろな状況があると思いますが、bashでも算術計算...
bash リダイレクションによる上書き禁止
何かコマンドからの出力を簡単にファイルに残しておけるので、リダイレクトは良く使います。しかし、たまに大事な既存ファイルに上書きしてしまって失敗することがあります。そんな「よくあるリダイレクトミス」を防ぎましょう! リダイレクトで上書き禁止す...
bash 配列の使い方|サンプルでわかる最低限の知識
bash 配列の使い方について、初期化・参照・削除のやり方〜配列を使った繰り返し処理まで、最低限の知識を短いサンプルで理解できます!bash の配列を理解すると、シェルスクリプトの応用の幅が広がります。 bash 配列の使い方 bash 配...
シェルスクリプト bash 最新版の利用
シェルスクリプト bash 最新バージョン シェルスクリプト bash バージョン確認 bashのバージョン確認を行います。現在、最新版はバージョン4.4(2017年1月)です。 $ bash --version bash --versio...
bash パイプ 複数コマンド 組み合わせ
複数のコマンドを連続で処理すると、解析作業が効率的に進むときがあります。コマンドの出力結果をソートしたり、さらに絞り込みを行ったりするだけで、分り易い結果になることは良くあることかもしれません。そんなちょっとしたテクニックでは、パイプ(|)...
linux コマンド プロセス置換 無駄な一時ファイルを作らない
bashでは、複数のコマンドをパイプでつなぐことができます。しかし、入力をファイルからしか受け取らない一部のコマンドでは、わざわざ一時ファイルを準備する必要があって意外と面倒です。そんなときは、プロセス置換を活用しましょう。無駄な中間ファイ...
バックグラウンド実行とフォアグラウンド実行 -プログラムの色んな実行方法-
解析プログラムは長い時間を必要とするものもあります。プログラムの実行や管理方法を理解して、作業効率を効率的に行いましょう。 バックグラウンド実行とフォアグラウンド実行 バックグラウンド実行をうまく活用しよう プログラムの実行には、起動後その...

関連記事2

xargs 引数を上手に使う | find と xargs でファイルのリネームやコピーをひと工夫
bioinformaticsでは、たくさんのファイルを使うことが多いので、ファイル処理は効率的に行いたいですね。このようなときfind コマンドや xargs コマンドが役に立ちます。 例えば、fastqファイルの拡張子を、fq.gz から...
パス名からファイル名を取得する方法
パス名からファイル名を抽出する場合は、basenameコマンドを使うと簡単です。 $ find . -name "test.txt" /aaa/bbb/ccc/test.txt $ find . -name "test.txt" | xar...
不要なファイルを探す ファイル名・ファイルサイズ・ファイル更新日時
バイオインフォマティクスの解析では大きなファイルを扱うことが多いので、ストレージの管理には気を使います。ストレージの容量を確保するために、不要なファイルはこまめに削除(または他の場所へ移動・圧縮など)することが、もっとも簡単で確実な方法だと...
ファイル名を一括変更 Windowsエクスプローラーとシェルスクリプト
バイオインフォマティクスでは、データファイルが大量になることがあります。いつも頭を悩ませるのがデータの管理です。たまにファイル名を一括で変更したいときがありますが、便利な方法があるので紹介したいと思います。 Windows エクスプローラー...
シェルスクリプト 引数の与え方とチェック方法
シェルスクリプトに引数を与える場合、引数が少ない場合はエラーにするなどの対策が必要です。一方、引数を10個以上うけとる場合、受け取り側で引数をずらしながら1つずつ取得する必要があります。 シェルスクリプトの引数をチェックする方法 シェルスク...
シェルスクリプト | ファイル存在チェック・空ファイルチェック
bashでスクリプトを作成するときに、よく使うのがファイルの存在チェックです。 if文と組合せると、ファイルの有無によって処理を分けることができます。エラー処理も記述できて使いやすいスクリプトになります。 様々な処理で活用できるので、是非参...
シェルスクリプト 関数 スクリプトの書き方
今回は、プログラムの基本構成となる「関数」を作ってみます。シェルで関数を作成すると、普段シェルを使って行っている作業を色々と自動化できて便利なことがあります。少しずつ、使えるようになると良いですね。 関数を利用したプログラム メッセージを1...
シェルスクリプト select メニューを作る スクリプトの書き方
select文を使うと、簡単にメニューを作成することができます。但し、Bシェルでは使えず bash を使います。リストでメニュー項目を準備します。select内の変数で、選ばれた項目や入力値を取得することができます。メニュープロンプトは、P...
シェルスクリプト Hello World スクリプトの書き方
シェルプログラミングをはじめましょう。使うシェルは「Bシェル」です。 Bシェルは機能が少ないのですが、どんなUNIXシステムでも動作するという利点があります。ログインシェルはbashやzshを使っている人が多いと思いますが、これらはBシェル...

コメント

  1. […] 文字列処理 部分文字列・置換・長さ・連結・分割 | バイオインフォ 道場 bioinfo-Dojo […]

タイトルとURLをコピーしました