【问题标题】:How can I use `sed` to replace the single quotes enclosing a directory with double quotes如何使用`sed`替换用双引号括住目录的单引号
【发布时间】:2014-08-07 20:20:56
【问题描述】:

我想要达到的目标:

假设我有一个文件file,内容如下:

ENV_VAR='/foo/`whoami`/bar/'
sh my_script.sh 'LOL'

我想替换 - 使用 sed - 单引号 包围目录名称,而不是那些包围看起来不像目录的东西,例如,参数一个脚本。

也就是说,在运行sed 命令后,我希望得到以下输出:

ENV_VAR="/foo/`whoami`/bar/"
sh my_script.sh 'LOL'

我们的想法是在不使用tr' 替换为"seds/'/"/g 的情况下实现这一点,因为我不想替换似乎不是的行目录。

请注意sedAIX 上运行,因此没有GNU sed 可用。

我尝试过的:

如果我像这样使用sed

sed "s;'=.*/.*';&;g" file

...& 变量保存了之前匹配的正则表达式,即:='/foo/`whoami`/bar/'。但是,我不知道如何进行替换,以便将 单引号 转换为 双引号

我想知道是否有办法通过单线仅使用sed 来完成这项工作。

【问题讨论】:

    标签: regex unix sed aix


    【解决方案1】:

    这样就可以了:

    /usr/bin/sed -e "/='.*\/.*'/ s/'/\"/g" file

    基本上,您只需要简单的 ' => " 替换,但不是针对所有行,仅针对与模式 ='.*\/.*'/ 匹配的行。并且,在 s 命令中,您只需要转义 "。

    【讨论】:

    • 那么,您可以使用s/x/y/g 作为 "outer" sed 中的替换部分吗?这对我来说是新的!谢谢!
    【解决方案2】:

    这应该可行:

    sed "s/'\(.*\/.*\)'/\"\1\"/g"
    

    捕获' 之间的部分并使用反向引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-27
      • 2016-08-10
      • 1970-01-01
      • 2011-01-26
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多