web-dev-qa-db-ja.com

入力ファイルではなく、リテラル文字列でsed

これは簡単なはずです。入力ファイルではなく、リテラル文字列に対してsedを実行したいのです。なぜだろうかと思ったら、たとえばテキストデータではなく、変数に保存されている値を編集するなどです。

私がする時:

sed 's/,/','/g' "A,B,C"

ここで、A、B、Cは、A '、' B '、' Cに変更するリテラルです

私は得る

Can't open A,B,C

A、B、Cがファイルであると考えるように。

パイピングしてエコーしました:

echo "A,B,C" | sed 's/,/','/g' 

プロンプトが表示されます。

それを行う正しい方法は何ですか?

70
amphibient

単一引用符の競合があるため、次を使用します。

 echo "A,B,C" | sed "s/,/','/g"

bash を使用する場合は、次のこともできます(<<<here-stringです):

sed "s/,/','/g" <<< "A,B,C"

だがしかし

sed "s/,/','/g"  "A,B,C"

sedは引数としてファイルを期待するため

編集

ksh またはその他のものを使用する場合:

echo string | sed ...
119
Gilles Quenot

あなたが望むように動作します:

echo "A,B,C" | sed s/,/\',\'/g
9
ferrants

Bashスクリプトで変数を使用する私のバージョン:

バックスラッシュを見つけて、スラッシュに置き換えます。

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
4
phyatt