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

amp*_*ent 73 unix linux sed

这应该很简单:我想对文字字符串运行sed,而不是输入文件.如果你想知道为什么,那就是,例如编辑存储在变量中的值,而不是文本数据.

当我做:

sed 's/,/','/g' "A,B,C"
Run Code Online (Sandbox Code Playgroud)

其中A,B,C是我想要改为A','B','C的文字

我明白了

Can't open A,B,C
Run Code Online (Sandbox Code Playgroud)

好像它认为A,B,C是一个文件.

我试着用它来回声:

echo "A,B,C" | sed 's/,/','/g' 
Run Code Online (Sandbox Code Playgroud)

我得到一个提示.

做正确的方法是什么?

Gil*_*not 122

你有一个单引号冲突,所以使用:

 echo "A,B,C" | sed "s/,/','/g"
Run Code Online (Sandbox Code Playgroud)

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

sed "s/,/','/g" <<< "A,B,C"
Run Code Online (Sandbox Code Playgroud)

但不是

sed "s/,/','/g"  "A,B,C"
Run Code Online (Sandbox Code Playgroud)

因为sed期望文件作为参数

编辑:

如果你使用或任何其他的:

echo string | sed ...
Run Code Online (Sandbox Code Playgroud)

  • 奇怪,对我不起作用...意识到这是不久前发布的,但如果这是问题所在,那么奇怪的弃用 (2认同)

fer*_*nts 9

像你想要的工作:

echo "A,B,C" | sed s/,/\',\'/g
Run Code Online (Sandbox Code Playgroud)


phy*_*att 5

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

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

input="This has a backslash \\"

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

echo "$output"
Run Code Online (Sandbox Code Playgroud)