我正在尝试使用sed将字符串中的单引号替换为双引号。
我尝试过这样的回应:这是一个可爱的日子| sed "s/'/\"/g“,但是字符串没有找到匹配项,也没有给出任何结果。
我在Ubuntu for windows上使用Bash
我做错了什么?
发布于 2017-04-10 05:15:12
扩展可以非常简单地得到你想要的东西:
original="it's a lovely day"
modified=${original//\'/\"}
echo "$modified"
除了它的简单性之外,这种扩展不使用外部命令(只使用shell特性),因此性能开销比启动单独的进程低得多。
稍微分解一下语法:
${original...}
表示我们正在扩展替换variable//
表示"search occurrences"\'
by"\"
is an original
/
to “替换所有替换是一个转义的双引号(要搜索的文本)
另一种有趣的方式是:
repl()
{
local IFS="$2$1"
set -- $3
echo "$*"
}
repl \' \" "it's a lovely day"
repl "'" '"' "it's a lovely day" # Quoted rather than escaped
可以以子see为代价使其符合POSIX(参见下面的注释):
repl()
(
IFS="$2$1"
set -- $3
echo "$*"
)
(repl \' \" "it's a lovely day")
(repl "'" '"' "it's a lovely day") # Quoted rather than escaped
子外壳是通过将语句括在括号中来创建的。不这样做会改变IFS的值(不像在第一个版本中那样声明为"local“),这可能是您想要避免的。
https://stackoverflow.com/questions/43311959
复制相似问题