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]
로케일, 운영 체제 또는 구현에 따라 문자 및 문자 간을 정렬하는 모든 데이터 정렬 요소를 의미하며 .0
9
sed
0123456789
그래서:
sed 's/[0123456789]\{1,\}/(&)/g'
또는:
sed -E 's/[0123456789]+/(&)/g'