khe*_*aud 11 regex string bash
我试图将用户输入存储在变量中并清理该变量,以便仅保留字母数字caract +其他一些(我的意思是[a-zA-Z0-9-_]).
我尝试过使用它,但并非详尽无遗:
SERVICE_NAME=$(echo $SERVICE_NAME | tr A-Z a-z | tr ' ' _ | tr \' _ | tr \" _)
Run Code Online (Sandbox Code Playgroud)
你有帮助吗?
use*_*own 17
Bash的字符串替换是件好事:$ {var // pat/rep}
val='Foo$%!*@BAR###baZ'
echo ${val//[^a-zA-Z_-]/_}
Foo_____BAR___baZ
Run Code Online (Sandbox Code Playgroud)
一个小的解释:斜杠引入了一个搜索/替换,有点像sed(它只是划分模式).但是你使用一个斜杠替换一个:
val='Foo$%!*@BAR###baZ'
echo ${val/[^a-zA-Z_-]/_}
Foo_%!*@BAR###baZ
Run Code Online (Sandbox Code Playgroud)
两个斜杠//意味着全部替换.不常见,但它有一些逻辑,多个斜线表示多次替换(请原谅我可怜的英语).
并注意$是如何从变量中分离出来的,但很难以这种方式修改文字常量(这对于测试很有用).修改$ 1也不是一件容易的事,afaik.
Ste*_*ice 11
$ echo 'asd!@QCW@@D' | tr A-Z a-z | sed -e 's/[^a-zA-Z0-9\-]/_/g'
asd__qcw__d
Run Code Online (Sandbox Code Playgroud)
我会使用sed
这个并^
在你的有效字符集中使用(not)运算符,并用下划线替换其他所有内容.以上显示了输出的语法.
而且,作为奖励,如果你想用一个下划线替换一堆无效字符,只需添加+
到正则表达式(并使用-r
开关sed
使其使用扩展正则表达式:
$ echo 'asd!@QCW@@D' | tr A-Z a-z | sed -r 's/[^a-zA-Z0-9\-]+/_/g'
asd_qcw_d
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5031 次 |
最近记录: |