这些示例也可以在bash中使用,而无需使用sed:
#!/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)和可能与其他形式的基于Shell的正则表达式不兼容。
这些不起作用:
#!/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
欢乐!