일치 후 sed가 대체되지 않는 이유는 무엇입니까?

일치 후 sed가 대체되지 않는 이유는 무엇입니까?

text.csv라는 파일이 있고 그 내용은 다음과 같습니다.

작은 발가락 10개

이게 바로 그거야

5 흥미로운 0

하나 둘 셋

나무를 두 번

숫자를 괄호로 묶어서 바꾸려고 하므로 예상되는 출력은 다음과 같습니다.

(1)(0) 작은 발가락

이게 바로 그거야

(5) 재미있다(0)

하나 둘 셋

나무를 두 번

나는 sed 명령을 다음과 같이 사용합니다.

sed 's/[0-9]/(&)/g' text.csv

그런 다음 올바른 출력을 얻지만 다음을 제공하려고 합니다.

sed 's/[0-9]*/(&)/g' text.csv

그런 다음 다음과 같은 출력을 제공합니다.

(10) ()T()i()n()y()()T()o()e()s()

()T()h()i()s() ()i()s() ()T()h()a()T()

(5) ()f()u()n()n()y() (0)

()하나 둘 셋()

()T()r()e()e() ()T()w()i()c()e()

따라서 *가 있다는 것은 바로 앞의 문자를 찾아서 (&)로 바꿔야 한다는 뜻인데, 이런 일은 일어나지 않는다. * 어디서 잘못됐나요?를 사용하여 검색하세요.

답변1

x*임의의 시퀀스를 나타냅니다.0또는 그 이상 x. 의 약자입니다 x\{0,\}. 따라서 빈 문자열과도 일치합니다. 성냥1이상, \{1,\}확장 정규식을 활성화하면 -E(일부 sed구현만) 로 단축될 수 있습니다 +.

일반적으로 [0-9]로케일, 운영 체제 또는 구현에 따라 문자 및 문자 간을 정렬하는 모든 데이터 정렬 요소를 의미하며 .09sed0123456789

그래서:

sed 's/[0123456789]\{1,\}/(&)/g'

또는:

sed -E 's/[0123456789]+/(&)/g'

관련 정보