【问题标题】:How to use SED without a file with an env var?如何在没有带有 env var 的文件的情况下使用 SED?
【发布时间】:2012-02-12 18:17:06
【问题描述】:

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

$ a='aoeua'
$ sed 's@a@o@g' <$a
bash: aoeua: No such file or directory
$ env|grep "SHELL"
SHELL=/bin/bash

我想要的输出是

ooeuo

'aoeua' 中的每个a 替换为o

【问题讨论】:

  • 我已根据接受的答案编辑了您的问题,以解释您正在寻找的输出。最初的问题向我们展示了 没有 的工作,但没有清楚地告诉我们您要做什么。 (劳伦斯猜对了。)

标签: bash shell sed environment-variables


【解决方案1】:

这可能对你有用:

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

&lt;&lt;&lt;$ahere-string

【讨论】:

  • 我需要在不回显的情况下进行替换(在 PS1 变量中使用)。这对我很有帮助
  • 一直在找这个...非常好
【解决方案2】:

使用回声:

$ echo "$a" | sed 's@a@o@g'

在 bash 中,您还可以使用 ${parameter/pattern/string} 语法进行简单的替换。例如:

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

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

【讨论】:

  • 对于全局替换,我们可以使用echo ${v//a/o}
  • @JaypalSingh 谢谢!我在手册页中没有看到任何提及,但它看起来有效。
  • 是的,写得不太好。这就是它所说的 - ${parameter/pattern/string} The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of pattern against its value is replaced with string. **If pattern begins with /, all matches of pattern are replaced with string**. Normally only the first match is replaced.
  • @JaypalSingh 啊,记录在案!我想我还没有通读整个段落(至少在添加后没有?)。如果他们有多个标题行,他们为###(或%%%)所做的方式可能会使这一点更加明显。
  • 是的 :) 问题是man page 上的所有 bash 好东西都以一种很容易被忽视的方式陈述。因为我对此很陌生,所以我已经声明做笔记,以便我可以参考这些而不是man。虽然这个guide 真的很好。
猜你喜欢
  • 2016-02-27
  • 2021-02-16
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 2015-07-15
  • 2021-02-03
  • 2019-05-12
相关资源
最近更新 更多