2012-01-17 10 views
7

env varのものをSEDに置き換えることはできますか?env varを持つファイルなしでSEDを使用するには?

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

私が欲しいの出力はo'aoeua'に各aを交換

ooeuo 

です。

+0

です。最初の質問は、*働かなかったことを示してくれましたが、あなたが何をしようとしているかを明確に伝えていませんでした。 (ローレンスは正しく推測しました) –

答えて

10

使用すると、エコー:bashで

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

をあなたも${parameter/pattern/string}構文を持つ単純な置換を行うことができます。例:

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

これは、パターンの最初のオカレンスに置き換わることに注意してください。

+3

**グローバル置換**では 'echo $ {v // a/o}'を実行できます。 –

+0

@JaypalSinghありがとう!マニュアルページにそれについての言及はありませんが、動作するようです。 –

+1

さて、それはあまりよく書かれていません。 '$ {parameter/pattern/string}パターンは、パス名展開と同じようにパターンを生成するように展開されます。パラメータが展開され、その値に対するパターンの最長一致がstringに置き換えられます。 **パターンが/で始まる場合、パターンのすべての一致が文字列**に置き換えられます。通常は最初の試合だけが交換されます。 ' –

6

これはあなたのために働くかもしれない:

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

<<<$aは、私は受け入れ答えに基づいて、あなたが探しているものの出力を説明するためにあなたの質問を編集したhere-string

+0

私はエコーすることなく置換を行う必要がありました(PS1変数での使用)。これは私に役立ちました – astreal

+0

しばらくの間これを探していた...非常に良い – sloven

+0

+1、素晴らしい構文!しかし、リンクは壊れています。 – JMCF125

関連する問題