regex - 使用正则表达式在 bash 中搜索和替换

标签 regex bash

我看过这个例子:

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/

相关文章:

regex - sbt-scoverage 排除语法

regex - 如何使用testthat以未知顺序测试多个警告?

linux - "mv file1 *.file1"是做什么的?

bash - 使用 awk 解析配置文件

mysql - 通过bash获取MYSQL数据库信息

regex - 正则表达式 : numbers spaces parentheses +

ruby - 如何在 Ruby 中替换字符串中每个区分大小写的单词实例?

bash - "echo>&2 message"、 "echo message >&2"和 ">&2 echo message"中重定向位置的区别

.net - 正则表达式:最小可能匹配或非贪婪匹配

linux - 试图显示特定目录占用的大小,我的情况是HOME目录