我有以下字符串:
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