これらの例は、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!