고정 길이의 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 사용) .I
perl
sed
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
구현에서는 여전히 이 작업을 수행하지 않고 지원되지 않습니다.