마지막 두 개의 쉼표를 점으로 바꿉니다.

마지막 두 개의 쉼표를 점으로 바꿉니다.

각 줄에서 마지막 두 개의 쉼표를 점으로 바꾸고 싶습니다.

이와 같은 두 가지 sed 파이프 방법을 찾았지만 MacOS의 sed에서는 작동하지 않습니다.

$ echo 'abc,def,12379,foo' | sed 's/\(.*\),/\1./'|sed 's/\(.*\),/\1./'
abc,def.12379.foo

모든 sed 버전에서 작동하는 방법이 있습니까? 반드시 sed에서만 사용되는 것은 아닙니다.

답변1

이 시도:

$ echo 'abc,def,12379,foo' | sed 's/,\([^,]*\),\([^,]*\)$/.\1.\2/'
abc,def.12379.foo

이렇게 하면 줄에 쉼표 하나만 남게 됩니다(예 foo,bar: ). 이것은 당신이 원하는 것일 수도 있고 아닐 수도 있습니다.

\(...\);의 모든 버전은 대체 문자열에서 그룹 캡처 및 \1역참조를 지원해야 합니다. 나는 Unix v7에서 위의 내용을 테스트했습니다.\2sed

추신. 귀하의 질문에 있는 이중 sed도 MacOS에서 작동할 것입니다. 아마도 귀하의 문제는 이 줄이 다음과 같다는 것입니다.캐리지 리턴으로 종료됨개행 대신?

답변2

echo 'abc,def,12379,foo' | sed -e 's/\(.*\),/\1./' -e 's/\(.*\),/\1./'

또는

echo 'abc,def,12379,foo' | sed -e 's/\(.*\),/\1./;s/\(.*\),/\1./'

답변3

를 사용하여 awk입력을 쉼표로 구분된 필드 집합으로 처리하고 마지막 세 필드를 점으로 연결합니다.

echo 'abc,def,12379,foo' |
awk 'BEGIN { OFS=FS="," } { print $1, $2 "." $3 "." $4 }'

관련 정보