sim*_*ico -5 regex bash perl sed
在PHP中:
$output = preg_replace("/[^a-z]/","_",strtolower($input));
Run Code Online (Sandbox Code Playgroud)
如何在BASH脚本中执行相同的操作?
您是否正在寻找模式替换(${parameter/pattern/string})和案例修改(${parameter,,pattern})?如果是这样,您将在Parameter Expansionman bash主题下找到更多信息。
$ a="FOO BAR BLUB"
$ tmp=${a// /_}
$ echo ${tmp,,}
foo_bar_blub
Run Code Online (Sandbox Code Playgroud)
但是要注意的一件事是BASH版本使用模式而不是正则表达式。例如,模式*类似于正则表达式.*。模式?是.。
需要bash4(已通过4.3.48测试)。
假设您从不需要变量的值中使用大写字母output,我将提出以下建议:
typeset -l output
output=${input// /_}
Run Code Online (Sandbox Code Playgroud)
typeset -l output:将变量定义为仅小写。来自man bash:
为变量分配值后,所有大写字符都将转换为小写。
output=${input// /_}:用下划线替换所有空格。
顺便说一句:还typeset -u variable可以将其定义为“全部大写”。请参阅man bash。
更新:在重新访问时,我意识到我的答案与问题题名匹配,但与PHP代码不匹配。在PHP示例中,所有未 a-z用下划线替换的字符。因此,如果input包含冒号或逗号,则它们也将由下划线替换。
因此,这里的代码也与之匹配:
typeset -l output
output=${input//[^a-z]/_}
Run Code Online (Sandbox Code Playgroud)
最后引用@ micha-wiedenmann的答案:
但是要注意的一件事是BASH版本使用模式而不是正则表达式。例如,该模式
*类似于正则表达式.*。模式?是.。
检查手册页并搜索“模式匹配”。
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |