sed를 사용하여 10자리 시퀀스를 바꾸는 방법

sed를 사용하여 10자리 시퀀스를 바꾸는 방법

'sed'를 사용하여 10자리 숫자 시퀀스를 1234567890으로 바꾸고 싶습니다.

이것은 작동하지만 매우 우아하지는 않습니다.

echo "code=1111111111" | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1234567890/'

이건 작동하지 않아

echo "code=1111111111" | sed 's/[0-9]{10}/1234567890/'

결과

code=1111111111

누구든지 'sed'를 사용하여 간단하고 우아한 솔루션을 제안할 수 있습니까?

답변1

sed기본 정규식은 기본적으로 사용됩니다. 즉, {10}일반 텍스트로 처리됩니다.

다음을 통해 확인할 수 있습니다.

echo "code=1{10}" | sed 's/[0-9]{10}/1234567890/'

다음을 출력합니다:

1234567890

귀하의 경우에는 다음이 필요합니다.

  • -E확장 정규식을 사용하도록 지정하려면 이 옵션을 사용하십시오 .
  • 다음과 같이 탈출 {하고 }가십시오 \{10\}.
echo "code=1111111111" | sed -E 's/[0-9]{10}/1234567890/'
echo "code=1111111111" | sed 's/[0-9]\{10\}/1234567890/'

답변2

sed다른 사람들은 기본적으로 POSIX를 이해하는 POSIX 확장 정규식을 사용하려고 한다고 지적했습니다.기초적인자주 사용되는 표현. 이 옵션을 사용하면 도구의 일부(대부분) 구현에서 확장 정규식을 이해하지만 -E로 변경하여 표현식을 기본 표현식으로 변경할 수도 있습니다.{10}\{10\}

하지만 확실히 교체하고 싶다면옳은10자리의 경우 입력의 다른 곳에 나타나는 숫자뿐만 아니라 긴 숫자도 일치시키지 않는 것이 좋습니다.

=입력에 대해 더 자세히 알지 못한 채 문자와 줄 끝을 일치시켜 일치를 제한하겠습니다.

sed 's/=[0-9]\{10\}$/=1234567890/'

=이렇게 하면 a와 줄 끝 사이에 나타나지 않는 긴 숫자와 10자리 숫자가 일치하는 것을 방지할 수 있습니다 .

code변수(또는 다른 값)의 값을 변경해야 한다는 것을 알고 있는 경우 code해당 이름도 일치시킵니다(여기서는 이름이 줄의 시작 부분에서 시작한다고 가정하고 해당 이름을 캡처합니다). \1중복을 줄이기 위해 교체 로 교체 ) :

sed 's/^\(code\)=[0-9]\{10\}$/\1=1234567890/'

답변3

ERE정규식 스타일을 사용하십시오 .

$ echo "code=1111111111" | sed -E 's/[0-9]{10}/1234567890/'
code=1234567890

답변4

첫 번째 시퀀스 10을 교체하려는 경우그리고 그게 다야1234567890 ASCII 십진수의 각 줄은 다음과 같아야 합니다.

sed -E 's/(^|[^0123456789])[0123456789]{10}([^0123456789]|$)/\112345678900\2/'

즉, 10자리 숫자( 구현 및/또는 로케일 에 따라 0123456789 대신 0123456789 [0123456789]대신 사용 )를 대체하고 그 앞에 줄 시작 또는 숫자가 아닌 문자가 오고 숫자 또는 숫자가 아닌 문자가 뒤에 옵니다. 줄 끝 .[0-9]sed

이는 여전히 또는 또는 1112223334.6로 대체되므로 원하는 내용 과 입력에서 찾을 수 있는 내용에 따라 조정해야 할 수도 있습니다 .1234567890.61.0000000000e-21.1234567890e-20xff0777888999ee0xff1234567890ee

바꾸다모두10의 순서그리고 그게 다야번호는 다음과 같을 수 있습니다:

sed -E 's/[0123456789]+/\
&\
/g; s/\n[0123456789]{10}\n/123456789/g;s/\n//g'

또는 다음으로 전환할 수 있습니다 perl.

perl -pe 's/(?<!\d)\d{10}(?!\d)/1234567890/g'

부정 예측 연산자를 사용하여 10진수 시퀀스의 앞이나 뒤에 다른 숫자가 오지 않는지 확인합니다.

관련 정보