これらの例は、sedを使用する必要なく、bashでも機能します。
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[a-zA-Z]/X}
echo ${MYVAR//[0-9]/N}
文字クラスの括弧式を使用することもできます
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
MYVAR=${MYVAR//[[:alpha:]]/X}
echo ${MYVAR//[[:digit:]]/N}
出力
XXNNNNNXXXXNNNNNXXXNNNXNNXNNNNXXXXXXNNNNNXXX
@Lanaruが知りたいのは、質問を正しく理解した場合、「フル」またはPCRE拡張機能\s\S\w\W\d\D
などがphp ruby pythonなどでサポートされているように機能しない理由です。これらの拡張機能は、Perl互換の正規表現(PCRE)およびシェルベースの正規表現の他の形式と互換性がない可能性があります。
これらは機能しません:
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//\d/}
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | sed 's/\d//g'
すべてのリテラル「d」文字を削除した出力
ho02123ware38384you44334o3434ingto38384ay
しかし、以下は期待どおりに機能します
#!/bin/bash
hello=ho02123ware38384you443d34o3434ingtod38384day
echo $hello | perl -pe 's/\d//g'
出力
howareyoudoingtodday
もう少しわかりやすくなりますが、まだ混乱していない場合は、REG_ENHANCEDフラグが有効になっているMac OS Xで試してみてください。
#!/bin/bash
MYVAR=ho02123ware38384you443d34o3434ingtod38384day;
echo $MYVAR | grep -o -E '\d'
* nixのほとんどのフレーバーでは、次の出力のみが表示されます。
d
d
d
nJoy!