2012-01-17 42 views
7

是否可以使用SED替換env var中的某個東西?如何在沒有env var的情況下使用SED?

$ a='aoeua' 
$ sed '[email protected]@[email protected]' <$a 
bash: aoeua: No such file or directory 
$ env|grep "SHELL" 
SHELL=/bin/bash 

我想輸出是

ooeuo 

'aoeua'o代替每個a

+0

我已經編輯你的問題說明你要找的輸出,基於公認的答案。原來的問題告訴我們什麼*沒有*工作,但沒有明確告訴我們你想做什麼。 (勞倫斯猜對了。) – 2012-01-18 01:25:48

回答

10

使用echo:

$ echo "$a" | sed '[email protected]@[email protected]' 

在bash你也可以做與${parameter/pattern/string}語法簡單替代。例如:

$ v='aoeua' 
$ echo ${v/a/o} 
ooeua 

請注意,這隻會替換模式的第一個匹配項。

+3

對於**全局替換**,我們可以做'echo $ {v // a/o}'。 – 2012-01-18 02:59:33

+0

@JaypalSingh謝謝!我在手冊頁中沒有看到任何提及,但它看起來像是有效的。 – 2012-01-18 06:52:52

+1

是的,它寫得不好。這就是它所說的:'$ {parameter/pattern/string}該模式被擴展爲產生一個模式,就像在路徑名擴展中一樣。參數被擴展並且模式與其值的最長匹配被字符串替換。 **如果模式以/開頭,則模式的所有匹配都將替換爲字符串**。通常只有第一場比賽被替換。' – 2012-01-18 07:08:16

6

這可能會爲你工作:

a='aoeua' 
sed '[email protected]@[email protected]' <<<$a 
ooeuo 

<<<$ahere-string

+0

我需要做更換而不回顯(在PS1變量中使用)。這對我很有幫助 – astreal 2013-02-17 11:45:04

+0

正在尋找這一段時間...非常好 – sloven 2013-03-25 15:57:20

+0

+1,真棒語法!但鏈接被破壞。 – JMCF125 2014-02-09 15:49:58

相關問題