119

これは簡単なはずです。入力ファイルではなく、リテラル文字列に対して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' 

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

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

4

3 に答える 3

171

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

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

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

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

だがしかし

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

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

編集

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

echo string | sed ...
于 2012-10-24T19:00:04.697 に答える
13

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

echo "A,B,C" | sed s/,/\',\'/g
于 2012-10-24T19:01:21.267 に答える
8

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

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

input="This has a backslash \\"

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

echo "$output"
于 2016-06-07T14:57:32.173 に答える