2017-04-09 98 views
-1

我想用双引号将单引号替换为使用sed的字符串。如何在Bash中用bash中的两个单引号替换单引号

我已经试过这样回音它是一个可爱的一天| SED“S /'/ \ “/ g的”,但该字符串没有发现比赛和没有给出结果。

我使用bash在Ubuntu的Windows

我在做什么错?

+0

为什么要用'sed',考虑'tr'代替...(例如。 ''tr''') –

+2

我意识到自己的错误,我并没有用“”标记中的回声来包围文本 –

+1

问题的标题是:'...用两个单引号(例如'''')问题的主体说:'用双引号'例如(''')... - imho,那是不同的。 – jm666

回答

2

的扩展可以得到你想要的东西很简单:

original="it's a lovely day" 
modified=${original//\'/\"} 
echo "$modified" 

除了它的简单性,这种扩张不使用外部命令(只有外壳的功能),因此性能开销比启动一个单独的进程要低得多

打破语法了一点:

  • ${original...}意味着我们正在扩大original变量
  • //意思是“搜索所有的”
  • \'是一个转义的单引号(文本搜索)
  • 独行/意味着
  • \"“以取代”是一个转义双引号(文字被替换)

另一种有趣的方式来做到这一点:

repl() 
{ 
    local IFS="$2$1" 
    set -- $3 
    echo "$*" 
} 

repl \' \" "it's a lovely day" 
repl "'" '"' "it's a lovely day" # Quoted rather than escaped 

可以制成符合POSIX标准的一个子shell的成本:

repl() 
(
    IFS="$2$1" 
    set -- $3 
    echo "$*" 
)