sed 명령을 사용하여 숫자 사이에 나타나는 을(를) 바꿉니다.

sed 명령을 사용하여 숫자 사이에 나타나는 을(를) 바꿉니다.

데이터가 다음 형식인 CSV 파일이 있습니다.

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

숫자 사이에 나타나는 ","만 SOH, $ 또는 *와 같은 다른 문자로 바꾸고 싶습니다.

줄에 나타나는 다른 ","는 대체되어서는 안 됩니다. 즉, 다음과 같은 출력을 원한다고 말하는 것입니다.

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

누군가 위에서 원하는 출력을 얻기 위해 sed 명령 패턴으로 나를 도와줄 수 있습니까?

답변1

이 시도

sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'

첫 번째 섹션은 숫자, 쉼표, 숫자 또는 -와 일치합니다. 다음 섹션에서는 단순히 첫 번째 숫자, 대체 문자, 마지막 숫자를 반복합니다.

이렇게 하면 원하지 않는 패턴(예: "abc123,-def" --> "abc123*-def")을 포함하여 "#,#" 또는 "#,-#"과 같은 모든 패턴을 포착합니다. 이 문제를 해결하려면 입력 스트림에 대한 더 많은 지식이 필요합니다. (자세한 내용은 댓글을 참고하세요.)

답변2

다음은 작동하는 것 같습니다 :

sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'

관련 정보