Bash字符串改变了部分单词

时间:2014-03-24 13:26:32

标签: string bash shell substitution

我需要在bash打印前更改字符串。所以我做了:

${RETEZEC//./D}

现在我需要再为-更改_。但不知道如何在那里添加它?在同一步骤,如$`{RETEZEC //./ D; // - / _},我需要一个额外的例外 - ?

3 个答案:

答案 0 :(得分:2)

您希望将.替换为D,将-替换为_

正如其他人评论的那样,你不能一步到位。但您可以使用tr

$ echo "$RETEZEC"
hel-lo_a.b.
$ tr '.-' 'D_' <<< "$RETEZEC"
hel_lo_aDbD

如果要将输出存储在同一变量中,请执行:

$ RETEZEC=$(tr '.-' 'D_' <<< "$RETEZEC")
$ echo $RETEZEC
hel_lo_aDbD

答案 1 :(得分:1)

您可以使用:

s='abc-def-foo'
echo "${s//-/_}"
abc_def_foo

答案 2 :(得分:1)

嵌套参数扩展是不可能的,需要两个表达式:

foo=${RETEZEC//./D}
echo "${foo//-/_}"

但是,您可以使用外部工具执行此操作,但我建议您坚持使用上面的本机shell解决方案。

$ echo "foo.-bar" | tr '.-' 'D_'
fooD-bar