2012-01-17 76 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

相关问题