데이터 추출을 위한 정규식/패턴 일치 문제

데이터 추출을 위한 정규식/패턴 일치 문제

다음 줄에서 거리를 제거하고 cdv 형식으로 출력하는 가장 좋은 방법은 무엇입니까? 명령줄에서 이 작업을 상당히 쉽게 수행할 수 있습니까? 완전한 스크립트를 작성하는 것을 피하고 싶습니다.

Greece 282 km, Macedonia 151 km, Montenegro 172 km, Kosovo 112 km
Central African Republic 797 km, Chad 1,094 km, Republic of the Congo 523

출력은 다음과 같습니다:

Greece,Macedonia,Montenegro,Kosovo
Central African Republic,Chad,Republic of the Congo

답변1

cdv 형식이 무엇인지는 확실하지 않지만 숫자와 선택적 측정 단위를 제거한 다음 나머지 쉼표 뒤의 공백을 압축하면 되는 것 같습니다.

sed 's/ *[0-9]\+\(,[0-9]\+\)\?\( *km *\)\?//g;s/, \+/,/g' file.txt

가독성을 높이려면 확장 정규식과 동일합니다(GNU의 경우 sed).

sed -r 's/ *[0-9]+(,[0-9]+)?( *km *)?//g;s/, +/,/g' file.txt

답변2

나에게 비슷한 데이터세트가 있습니다.

sed -e 's/[0-9]*.[0-9]*.km//g' -e 's/\,\ /\,/g' <file>

답변3

파티에 조금 늦었습니다... GNU awk + sed를 사용하여 수행하는 방법은 다음과 같습니다.

awk -F'[[:space:]]*[[:digit:],]+[[:space:]]*?km[[:space:],]*' 'BEGIN{OFS=","}{$1=$1;print}' | sed 's/,$//g'

관련 정보