将带有命令替换的 sed 输出存储到变量中
Store output of sed with command substitution in it into a variable
考虑一个字符串
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"))
但它不起作用。为什么不起作用?
您的 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
如果您正在使用 bash
4,则不需要 sed
:
NewMessage=${Message,,R}
考虑一个字符串
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"))
但它不起作用。为什么不起作用?
您的 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
如果您正在使用 bash
4,则不需要 sed
:
NewMessage=${Message,,R}