2017-04-09 67 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 "$*" 
)