다음 문자열이 있습니다.
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