首页 > 解决方案 > sed替换单引号

问题描述

我会为一件简单的事情发疯。我写了以下令人惊讶的行:

name=$(echo $name | sed 's/"//g' | sed 's/^ //' | sed 's/ $//' | sed "s/'/\\\'/")

我试图将 sed 减少到只有一个命令而不是四个,并且我编写了以下行不起作用,并且我无法使其工作:

name=$(echo $name | sed 's/"//g; s/^ //; s/ $//; s/\'/\\\'/g')

我得到:

sed: 1: "s/"//g; s/^ //; s/ $//; ...": unterminated substitute in regular expression

我究竟做错了什么?我看不到语法错误,我尝试多次重写它,4 sed 的行有效,但是我尝试将所有内容放在一个 sed 中却没有。

非常感谢您的帮助!

标签: sed

解决方案


无论您现在使用多少转义符,都不能在单引号字符串中嵌入单引号:3.1.2.2 单引号

您可以使用 sed 的-e选项来链接命令并为您提供最大的引用灵活性:

sed -e 's/"//g' -e 's/^ //' -e 's/ $//' -e "s/'/\\\'/"
# or
sed -e 's/"//g; s/^ //; s/ $//' -e "s/'/\\\'/"

推荐阅读