【发布时间】:2021-08-10 16:08:22
【问题描述】:
我正在为一件简单的事情而发疯。我写了以下行,效果惊人:
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 中却没有。
非常感谢您的帮助!
【问题讨论】:
-
使用好的编辑器。甚至在这里在 stackoverflow 上着色也在暗示你。
-
您应该双引号引用变量引用(例如
echo "$name"而不仅仅是echo $name),以防止在值到达sed之前进行奇怪的解析。请参阅"I just assigned a variable, butecho $variableshows something else"(但请注意,这并不适用于仅到echo;它几乎适用于所有地方)。 shellcheck.net 擅长发现此类常见错误。 -
好建议戈登,谢谢!
标签: sed