固定長の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-opensed
は例外です)。ロケールに関係なく、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
実装では、まだこれを実行せず、サポートされていません。