Ayu*_*hra 10 unix linux bash shell terminal
假设我有一个字符串$ str.我想要编辑$ str,使其中的所有空格都被下划线替换.
例
a="hello world"
Run Code Online (Sandbox Code Playgroud)
我想要最终的输出
echo "$a"
Run Code Online (Sandbox Code Playgroud)
是hello_world
fed*_*qui 11
sed直接从变量读取:
$ sed 's/ /_/g' <<< "$a"
hello_world
Run Code Online (Sandbox Code Playgroud)
要存储结果,您必须使用var=$(command)以下语法:
a=$(sed 's/ /_/g' <<< "$a")
Run Code Online (Sandbox Code Playgroud)
为了完整起见,awk可以这样做:
$ a="hello my name is"
$ awk 'BEGIN{OFS="_"} {for (i=1; i<NF; i++) printf "%s%s",$i,OFS; printf "%s\n", $NF}' <<< "$a"
hello_my_name_is
Run Code Online (Sandbox Code Playgroud)
$ a="hello world"
$ echo ${a// /_}
hello_world
Run Code Online (Sandbox Code Playgroud)
根据bash(1):
Run Code Online (Sandbox Code Playgroud)${parameter/pattern/string}模式替换.扩展模式以生成模式,就像在路径名扩展中一样.扩展参数,并将模式与其值的最长匹配替换为字符串.如果pattern以/开头,则替换所有模式匹配
用字符串.通常只替换第一场比赛.如果pattern以#开头,则它必须在参数的扩展值的开头匹配.如果pattern以%开头,则它必须在参数的扩展值的末尾匹配.如果string为null,则删除pattern的匹配,并且可以省略/ following模式.如果参数是@或*,则替换操作依次应用于每个位置参数,并且扩展是结果列表.如果parameter是使用@或*下标的数组变量,则替换操作依次应用于数组的每个成员,并且扩展是结果列表.
纯粹的bash:
a="hello world"
echo "${a// /_}"
Run Code Online (Sandbox Code Playgroud)
或者tr:
tr -s ' ' '_' <<< "$a"
Run Code Online (Sandbox Code Playgroud)
这可以通过GNU shell 参数扩展轻松实现。尤其:
${parameter/pattern/string}
如果模式以 开头
/,则模式的所有匹配项都将替换为字符串。
和+(pattern-list)
匹配给定模式的一次或多次出现。
因此:
$ a='hello world example'
$ echo ${a// /_}
hello_world____example
$ echo ${a//+( )/_}
hello_world_example
Run Code Online (Sandbox Code Playgroud)
然而,要使其在 bash 脚本中工作,需要进行两项修改:
bash 脚本最终如下所示:
$ a='hello world example'
$ echo ${a// /_}
hello_world____example
$ echo ${a//+( )/_}
hello_world_example
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24619 次 |
| 最近记录: |