将带有命令替换的sed的输出存储到变量中

时间:2016-08-25 16:03:37

标签: bash shell sed substitution

考虑一个字符串

Message="Hello WoRld"

我想用小写R

替换大写r
echo "$Message" > file.txt
NewMessage=$(sed 's/R/r/' file.txt)

工作正常!以下也适用

NewMessage=$(echo ${Message} | sed 's/R/r/')

但我的第一反应是使用命令替换

NewMessage=$(sed 's/R/r/' <("$Message"))

但它不起作用。为什么它不起作用?

2 个答案:

答案 0 :(得分:3)

你的cmd-sub版 错过了领先的M

但你想要

NewMessage=$(sed 's/R/r/' <(echo "$Message"))

或者你的shell可能支持

NewMessage=$(sed 's/R/r/' <<< "$Message")

修改

最简单,最广泛支持的解决方案将更加简单

NewMessage=$(echo "$Message" | sed 's/R/r/') 

如果你需要与Bourne Shell绝对的石器时代兼容性(真/bin/sh)那么你将不得不放弃漂亮的$(..cmdSub)语法并使用反引号进行命令替换:

NewMessage=`echo "$Message" | sed 's/R/r/'` 

IHTH

答案 1 :(得分:3)

如果您使用bash 4,则不需要sed

NewMessage=${Message,,R}