0

次のような文字列があります。

a1="a,b,c,(d,e),(f,g)";

配列を取得する方法

arr=["a","b","c","d,e","f,g"];

括弧の間のカンマを別の文字に置き換え、配列に変換した後に元に戻したい

しかし、括弧の間のコンマだけを置き換える方法がわかりません。これはどのように行うことができますか?

4

3 に答える 3

1

GNU sed パーサー

sed 's/,/\",\"/g;s/(\(.\)\"/\1/g;s/\"\(.\))/\1/g;s/^\w\+=\"/arr=[\"/;s/;/];/'
于 2013-06-04T11:45:47.907 に答える
0

正規表現を使用して文字列を解析するスクリプトに従ってみてください。私には厄介ですが、うまくいくようです:

#!/usr/bin/env bash

unset arr
a1="a,b,c,xxx(d,e),sdf(f,g)"

## The regular expression does an alternation between
## a pair of parens followed by an optional comma "\([^\)]+\)(,?)"
## or any characters followed by a comma or end of line "[^,]+(,|$)"
## After that I save all the rest of the string to match it in
## following iterations.
while [[ $a1 =~ ([^\(,]*\([^\)]+\)(,?)|[^,]+(,|$))(.*) ]]; do

    ## BASH_REMATCH keeps grouped expressions. The first one
    ## has the data extracted between commas. This removes the
    ## trailing one.
    elem="${BASH_REMATCH[1]%,}"

    ## Remove opening paren, if exists one.
    elem="${elem/\(/}"

    ## Remove trailing paren, if exists one.
    elem="${elem%)}"

    ## Add element to an array.
    arr+=("$elem")

    ## Use the string left (fourth grouped expression in
    ## the regex) to continue matching elements.
    a1="${BASH_REMATCH[4]}"
done

printf "%s\n" "${arr[@]}"

次のように実行します。

bash script.sh

次の結果が得られます。

a
b
c
xxxd,e
sdff,g
于 2013-06-04T10:59:28.833 に答える