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

관련 정보