我看过这个例子:
hello=ho02123ware38384you443d34o3434ingtod38384day
echo ${hello//[0-9]/}
遵循以下语法:${variable//pattern/replacement}
不幸的是,pattern
字段似乎不支持完整的正则表达式语法(例如,如果我使用 .
或 \s
,它尝试匹配文字字符)。
如何使用完整的正则表达式语法搜索/替换字符串?
最佳答案
使用sed :
MYVAR=ho02123ware38384you443d34o3434ingtod38384day
echo "$MYVAR" | sed -e 's/[a-zA-Z]/X/g' -e 's/[0-9]/N/g'
# prints XXNNNNNXXXXNNNNNXXXNNNXNNXNNNNXXXXXXNNNNNXXX
注意后面的-e
是按顺序处理的。此外,表达式的 g
标志将匹配输入中的所有匹配项。
您也可以使用此方法选择您喜欢的工具,即 perl、awk,例如:
echo "$MYVAR" | perl -pe 's/[a-zA-Z]/X/g and s/[0-9]/N/g'
这可以让你做更多有创意的匹配......例如,在上面的片段中,除非第一个表达式匹配(由于惰性和
),否则不会使用数字替换> 评估)。当然,您有 Perl 的完整语言支持来执行您的命令...
关于regex - 使用正则表达式在 bash 中搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043344/