次の文字列があります。
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