bashで変数を正規表現で置換して変数に代入する方法
bashで変数を置換して変数に代入する方法を紹介します。
ネットで上記の方法を調べたのですが、bashの変数を正規表現の入力にしたりとか、置換結果を変数に代入する記事があまりみつからなかったので、このエントリーでまとめておきます。
ビギナーの方向けの内容です。文字列置換ではsedを前提とします。
1.問題点
例えば、
00012345
というテキストを含むファイル「foo.txt」から「12345」を抜き出したい場合、コマンドラインで次のように実行します。
#!/bin/sh
sed -e "s/[0]*\(12345\)/\1/" foo.txt
上記の内容を「foo.sh」というファイルに保存して実行すると、標準出力に「12345」を出力します。
% ./foo.sh
12345
ですが、以下のことが分かりません。
- テキストファイルではなく、bashの変数を入力にしたい
- 置換後の内容をbashの変数に代入したい
2.bashの変数を入力にして置換する
bashの変数を入力にして置換するには、まずechoで変数の内容を出力し、パイプ「|」を使ってsedに渡します。
#!/bin/sh
foo="00012345"
echo ${foo} | sed -e "s/[0]*\(12345\)/\1/"
上記の内容を実行すると、1項と同じように「12345」を表示します。
% ./foo.sh
12345
ただ、この状態ではまだ実行結果を変数に代入できていません。
3.実行結果を変数に代入する
2項の実行結果「12345」を変数に代入するには、sedの行全体をバッククォートで括り、それを変数に代入します。
#!/bin/sh
foo="00012345"
bar=`echo ${foo} | sed -e "s/[0]*\(12345\)/\1/"`
echo ${bar}
上記の内容を「foo.sh」というファイルで保存して実行すると、置換した結果を変数barに代入し、最後のechoで「12345」を表示します。
% ./foo.sh
12345
Posted by yujiro このページの先頭に戻る
- シェルスクリプトのexpectで応答メッセージを振り分ける方法
- bashでPostgreSQLのselect結果を出力する方法
- bashでbackspaceが動作しない場合の対処
- bashの変数から最後の1文字を取得・削除する方法
- bashのwhile文で利用した変数がループ外で反映されない場合の対処
- bashのechoでアスタリスク「*」がワイルドカードとして展開される場合の対処
- bashの正規表現でスペース(空白)を判定する方法
- bashで文字列の長さを調べる方法
- bashで数値を判定する方法
- bashで小数点を比較する方法
- bashの配列をjoinする方法
- bashのif文で正規表現を使用する方法
- Bashで変数を大文字または小文字に変換する方法
- bashの変数をsplitして配列を作る方法
- シェルスクリプトでtelnet接続する方法
トラックバックURL
コメントする
greeting