고정 길이 16진수 주소와 일치하는 sed의 정규식 패턴

고정 길이 16진수 주소와 일치하는 sed의 정규식 패턴

고정 길이의 16진수 주소와 일치하도록 sed에서 정규식 패턴을 사용하고 싶습니다. 예를 들어:

0x000000010b2e993c

0x항상 존재하며 그 뒤에 16자의 16진수 숫자가 옵니다. 이것은 성공적입니다:

's/0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]//'

16번을 0x사용할 수 있는 단축 방법이 있나요 ?[0-9a-f]

답변1

sed 's/0[xX][[:xdigit:]]\{16\}//g'

기본 정규식을 사용한 표준 구문입니다.

sed이제 대부분의 구현에서는 -E다음으로 전환하는 옵션을 지원합니다.확장하다정규식¶:

sed -E 's/0[xX][[:xdigit:]]{16}//g'

[[:xdigit:]][0123456789abcdefABCDEF]( [0-9a-fA-F]0과 9, a와 f 또는 A와 F 사이에서 순서가 지정된 수백 개의 다른 문자와 반드시 일치할 필요는 없음) 과 동일합니다 .

어쨌든 에는 가 0x01234567890123456789포함되어 있으므로 0x0123456789012345로 대체됩니다 6789.

0x<16-hex-digits>뒤에 다른 16진수가 없는 경우에만 바꾸려면 다음을 사용할 수 있습니다 perl.

perl -pe 's/0x[0-9a-f]{16}(?![0-9a-f])//gi'

(?!...)부정 예측 어설션 연산자는 일반적으로 지원되는 정규식에서 사용할 수 없습니다 sed(ast-open sed은 예외). 로케일에 관계없이 0123456789 및 abcdef만 일치하지만 perl [0-9]원하는 경우 거기에서도 사용할 수 있습니다.[a-f][[:xdigit:]]

추가 sed구현 지원단어 경계연산자이지만 구문은 구현마다 다릅니다.

  • \b그림perl
  • \<, \>그림 ex/vi
  • [[:<:]], [[:>:]]일부 BSD에서는

일부 sed구현에서는 대소문자를 구분하지 않도록 i또는 플래그를 지원합니다(예: GNU 사용) .Iperlsed

sed -E 's/0x[[:xdigit:]]{16}\b//gi'

좋다:

perl -pe 's/0x[0-9a-f]{16}\b//gi'

0x<16-hex-digits>뒤에 단어 문자(숫자 또는 밑줄)가 없으면 다음 단어 경계가 제거됩니다 .


처음에는 기본 정규식과 확장 정규식 모두 \{x[,y]\}/ {x[,y]}연산자가 없습니다. 일관성을 위해 \{...\}먼저 BRE에 추가한 다음 {...}ERE(POSIX에 의해 구동됨)를 추가하지만 이전에 지정되지 않은 BRE 동작과 달리 이전 버전과의 호환성이 깨지기 때문에 마지 못해 종종 추가 합니다 \{...\}. 일부 awk또는 egrep구현에서는 여전히 이 작업을 수행하지 않고 지원되지 않습니다.

관련 정보