Bash 如何在没有带有env var的文件的情况下使用SED?

Bash 如何在没有带有env var的文件的情况下使用SED?,bash,shell,sed,environment-variables,Bash,Shell,Sed,Environment Variables,是否可以用SED替换env var中的某个东西 $ a='aoeua' $ sed 's@a@o@g' <$a bash: aoeua: No such file or directory $ env|grep "SHELL" SHELL=/bin/bash 将'aoeua'中的每个a替换为o使用echo: $ echo "$a" | sed 's@a@o@g' 在bash中,还可以使用${parameter/pattern/string}语法进行简单的替换。例如: $ v='aoeu

是否可以用SED替换env var中的某个东西

$ a='aoeua'
$ sed 's@a@o@g' <$a
bash: aoeua: No such file or directory
$ env|grep "SHELL"
SHELL=/bin/bash
'aoeua'
中的每个
a
替换为
o

使用echo:

$ echo "$a" | sed 's@a@o@g'
在bash中,还可以使用
${parameter/pattern/string}
语法进行简单的替换。例如:

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

请注意,这只会替换第一次出现的模式。

这可能适用于您:

a='aoeua'
sed 's@a@o@g' <<<$a
ooeuo
a='aoeua'

塞德s@a@o@g我编辑了你的问题,根据公认的答案解释了你在寻找什么样的产出。最初的问题向我们展示了什么不起作用,但没有清楚地告诉我们你想做什么。(劳伦斯猜对了。)对于全局替换,我们可以做
echo${v//a/o}
@JaypalSingh谢谢!我在手册页上没有看到任何提到这一点,但它看起来很有效。是的,它写得不太好。这就是它所说的-
${parameter/pattern/string}模式被扩展以产生一个模式,就像在路径名扩展中一样。参数展开,模式与其值的最长匹配替换为字符串**如果模式以/开头,则模式的所有匹配项都将替换为字符串**。通常只有第一个匹配项被替换。
@JaypalSingh-Ah,所以它被记录在案!我想我还没有看完那整段话(至少自从添加了这段话之后没有读过?)。如果它们有多个标题行,就像它们对
所做的那样(或
%
%
),这可能会使这一点更加明显。是的:)问题是
手册页上的所有bash商品都是以一种容易被忽略的方式陈述的。因为我对这一点很陌生,所以我已经说明了做笔记,以便我可以参考这些笔记,而不是
。虽然这真的很好。我需要在没有回声的情况下进行替换(在PS1变量中使用)。这对我很有帮助我找了一段时间…很好
a='aoeua'
sed 's@a@o@g' <<<$a
ooeuo