如何使用 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

相关内容