sed - 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 中却没有。
非常感谢您的帮助!
解决方案
无论您现在使用多少转义符,都不能在单引号字符串中嵌入单引号: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/'/\\\'/"
推荐阅读
- spring-boot - #Spring Webflux中的Achieve Interceptor如何验证headers?
- types - 自定义原始类型的最大位数?
- typescript - Ember 和 Typescript - 定义动作
- sql - 多行到可变数量的列
- r - 将栅格函数应用于子文件夹中的文件
- python - wxpython-phoenix 需要 osx/ipython/pycharm 上的 python 框架
- kotlin - 在 Kotlin DSL 构建器中控制范围
- reactjs - 在 react-bootstrap-table2 上切换列
- contiki - 在 Contiki 应用程序中未定义对“pow”的引用
- php - 如何阅读肥皂响应标头