如何使用`sed`替换用双引号括住目录的单引号
Posted
技术标签:
【中文标题】如何使用`sed`替换用双引号括住目录的单引号【英文标题】:How can I use `sed` to replace the single quotes enclosing a directory with double quotes 【发布时间】: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
将'
替换为"
或sed
像s/'/"/g
的情况下实现这一点,因为我不想替换似乎不是的行目录。
请注意sed
在AIX
上运行,因此没有GNU sed
可用。
我尝试过的:
如果我像这样使用sed
:
sed "s;'=.*/.*';&;g" file
...&
变量保存了之前匹配的正则表达式,即:='/foo/`whoami`/bar/'
。但是,我不知道如何进行替换,以便将 单引号 转换为 双引号。
我想知道是否有办法通过单线仅使用sed
来完成这项工作。
【问题讨论】:
【参考方案1】:这样就可以了:
/usr/bin/sed -e "/='.*\/.*'/ s/'/\"/g" file
基本上,您只需要简单的 ' => " 替换,但不是针对所有行,仅针对与模式 ='.*\/.*'/
匹配的行。并且,在 s 命令中,您只需要转义 "。
【讨论】:
那么,您可以使用s/x/y/g
作为 "outer" sed
中的替换部分吗?这对我来说是新的!谢谢!【参考方案2】:
这应该可行:
sed "s/'\(.*\/.*\)'/\"\1\"/g"
捕获'
之间的部分并使用反向引用。
【讨论】:
以上是关于如何使用`sed`替换用双引号括住目录的单引号的主要内容,如果未能解决你的问题,请参考以下文章