정규식은 끝에 0이 추가된 길이가 46인 숫자나 소문자를 찾습니다.
C:\Users\svuppula>echo "0020000000000000100000000000000000000000000001" | sed -e 's/[0-9a-z]{45}/\10/g'
sed: -e expression #1, char 20: invalid reference \1 on `s' command's RHS
grep이 작동하는 곳
C:\Users\svuppula>echo "0020000000000000100000000000000000000000000001" | grep -E '[0-9a-z]{45}'
"0020000000000000100000000000000000000000000001"
버전:
C:\Users\svuppula>sed --version
sed (GNU sed) 4.2.2
C:\Users\svuppula>grep --version
grep (GNU grep) 2.24
답변1
\1
괄호 안의 첫 번째 그룹을 나타내지만 여러분은 그렇지 않습니다. 괄호를 추가하거나 &
전체 일치 문자열을 채웁니다.
$ echo "foobar" | sed -e 's/foo/&ABC/'
fooABCbar
$ echo "foobar" | sed -re 's/(foo)/\1ABC/'
fooABCbar
-r
GNU sed에서는 괄호를 사용해야 하며 개수 {NN}
도 일치해야 합니다. (모든 항목에 보기 흉한 백슬래시 이스케이프를 사용하고 싶지 않다면)
그래서:
echo "0020000000000000100000000000000000000000000001" | sed -re 's/([0-9a-z]{45})/\19/g'
00200000000000001000000000000000000000000000091
숫자 문자열의 길이는 46자이지만 정규식은 45자만 일치하므로 마지막 숫자 앞에 9자가 추가됩니다. 정확히 45자가 포함된 줄만 처리하려면 정규식을 줄의 시작과 끝 부분에 고정하세요.
$ echo "002000000000000010000000000000000000000000001" | sed -re 's/^[0-9a-z]{45}$/&9/g'
0020000000000000100000000000000000000000000019
(입력에 0이 섞이지 않도록 9에 추가한 숫자를 변경했습니다.)