用文字字符串sed-不输入文件


91

这应该很容易:我想对文字字符串而不是输入文件运行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' 

我得到提示。

正确的做法是什么?

Answers:


148

您有单引号冲突,因此请使用:

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

如果使用 ,您也可以这样做(<<<here-string):

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

但不是

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

因为sed期望文件作为参数

编辑

如果您使用 或任何其他:

echo string | sed ...

1
奇怪,对我不起作用...意识到它是在一段时间前发布的,但是如果这是问题,就应该弃用它
超级英雄

10

可以像您想要的那样工作:

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

5

我的版本在bash脚本中使用变量:

查找任何反斜杠并替换为正斜杠:

input="This has a backslash \\"

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

echo "$output"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.