bashの変数をsplitして配列を作る方法

May 9,2019 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

bashの変数をsplitして配列を作る方法を紹介します。

1.問題点

bashで次のような変数を作成しました。

#!/bin/bash
 
foo=a,b,c,d,f,e,g

この変数fooを","でsplit(分割)して配列変数に代入したいのですが、方法がわかりません。

ということで、bashの変数をsplitして配列を作る方法を紹介します。

2.bashの変数をsplitして配列を作る

bashの変数をsplitして配列を作るには、文字列置換を利用します。

#!/bin/bash
 
foo=a,b,c,d,f,e,g
list=(${foo//,/ })
echo ${list[@]}
echo ${list[1]}

実行結果

a b c d e f g
b

3.文字列置換について

今回利用したbashの文字列置換のフォーマットは、

${変数名/置換前文字列/置換後文字列}

が基本です。

これで、変数の中にマッチする文字があれば1回のみ置換します。

#!/bin/bash
 
foo=a,b,c,d,f,e,g
list=(${foo/,/ })
echo ${list[@]}
echo ${list[1]}

実行結果

a b,c,d,e,f,g
b,c,d,e,f,g

マッチする文字をすべて置換したい場合は、2項のサンプルのようにスラッシュを2つにして、

${変数名//置換前文字列/置換後文字列}

とします。

"//"はsedの"/g"オプションと同じ意味になります。

Comments [0] | Trackbacks [0]

PythonでEUC-JPのファイルを読み込んで正規表現を使う方法

April 30,2019 11:55 PM
Category:[Python]
Tag:[Python]
Permalink

PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

Pythonは2.x系です。

1.問題点

下記の、文字コードがEUC-JPのファイルがあります。

text.txt

テスト1
テスト2
テスト3

このファイルから「テスト2」の部分だけをマッチさせたいので、下記のスクリプトを作ったのですがマッチしません。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search('テスト2', line)
    if result:
        print line

ということで、PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

2.EUC-JPのファイルを読み込んで正規表現を使う

EUC-JPのファイルを読み込んで正規表現を使うには、search()の第1パラメータにuフラグを与えます。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search(u'テスト2', line)
    if result:
        print line

これでEUC-JPのファイルで正規表現が使えるようになります。

Comments [0] | Trackbacks [0]

Pythonで正規表現を使う方法

April 24,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで正規表現を使う方法を紹介します。

1.問題点

下記のスクリプトを書きました。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
str = 'abc123def'
print str

このスクリプトを修正して、変数strに含まれる数字"123"だけを出力したいのですが、方法が分かりません。

ということで、Pythonで正規表現を使う方法を紹介します。

正規表現の詳細については、ここでは割愛します。

2.Pythonで正規表現を使う

正規表現を使うには次のようにします。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import re
 
str = 'abc123def'
result = re.search('\d{3}', str)
print result.group()

3.解説

Pythonの正規表現モジュール「re」をインポートします。

import re

パターンに一致するか調べるには、search()を使用します。

result = re.search('\d{3}', str)

フォーマットは次のとおりです。

  • 第1パラメータ:パターン
  • 第2パラメータ:対象の文字列または変数

戻り値のresultには一致結果がはいっています。group()メソッドを使うことでパターンにマッチした内容すべてを返却します。

サンプルでは数字3文字にマッチした"123"が出力されます。

パターンマッチの関数はsearch()の他にmatch()がありますが、これは文字列の先頭がパターンマッチするかを調べるためのものです。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages