【问题标题】:Use variable inside double quotes inside single quotes in sed [duplicate]在sed中的单引号内使用双引号内的变量[重复]
【发布时间】:2014-12-31 20:23:10
【问题描述】:

我想搜索由位置参数给出的双引号括起来的字符串。这就是我所做的:

    #!/bin/bash

    FOO=$0

    sed -i 's/"${FOO}"/bar/m' file.txt

"$FOO"\"a${FOO}\"/ 都不起作用。

我知道要扩展变量,您必须将整个正则表达式括在双引号中 (sed substitution with bash variables)。问题是我正在搜索的字符串也用双引号括起来,这就是为什么我将整个正则表达式括在单引号中。我还尝试将其括在双引号中并转义双引号,但它没有用。

解释单引号和双引号转义背后的逻辑非常有用。

【问题讨论】:

    标签: bash sed


    【解决方案1】:

    使用双引号将 sed 命令引用为

    sed -i "s/\"${FOO}\"/bar/m" file.txt

    测试:

    $ echo $b
    hello
    $ echo \"hello\" | sed "s/\"$b\"/asdf/"
    asdf
    

    【讨论】:

    • 如果位置参数是“foo”(不带引号),这会匹配“foo”(包括引号)吗?
    • 对不起,我没有找到你
    • 我想搜索:“blaba”,而不是 blabla。我希望传递给脚本的字符串不会用双引号引起来,但我必须找到的文本是。
    • @Federico 我已经编辑了答案以包含它。希望它现在有所帮助
    • 嗯。它不工作。现在命令输出抛出错误sed: -e expression #1, char 12: unknown option to s'`
    猜你喜欢
    • 2015-11-06
    • 2016-12-17
    • 1970-01-01
    • 2019-12-13
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多