sedを使用して括弧内の文字列を置き換える方法

sedを使用して括弧内の文字列を置き換える方法

次の文字列があります。

col1|col2|col3+++++++++++A|1|a B|2|b C|3|c D|4|d  (3 rows)

この文字列を分割して最後の+記号まで文字列の先頭を削除してから、尾(XYZ線)を削除したいと思います。

ここで、文字列はA|1|a B|2|b C|3|c D|4|d 以下のように複数の配列に分割したいと思います。

A 1 a 
B 2 b 
C 3 c 
D 4 d

これにより、forループを使用して各行を繰り返していくつかの処理を実行できます。

sedまたはgrepを使用してこれをどのように実行できますか?

初めてこれを試しましたが、うまくいきませんでした。

echo $string | sed 's/([0-9])rows//' | sed 's/[^+]//'

しかし、成功しませんでした。

答え1

echo "col1|col2|col3+++++++++++A|1|a B|2|b C|3|c D|4|d  (3 rows)" |sed -e 's/.*\++//; s/d .*/d/; s/|\(.\)|\(.\)\s*/ \1 \2\n/g'

A 1 a
B 2 b
C 3 c
D 4 d

答え2

Bashの変数拡張を介して:

str="col1|col2|col3+++++++++++A|1|a B|2|b C|3|c D|4|d  (3 rows)"
str=${str%  (*}
str=${str##*+}
str=${str// /
}
str=${str//|/ }

または経由sed

sed 's/.*+\(.*\S\)\s\+(.*/\1/;y/ |/\n /' <<\eof
col1|col2|col3+++++++++++A|1|a B|2|b C|3|c D|4|d  (3 rows)
eof
A 1 a
B 2 b
C 3 c
D 4 d

関連情報