【问题标题】:Sed not working inside bash scriptSed 在 bash 脚本中不起作用
【发布时间】:2011-03-02 05:36:37
【问题描述】:

我相信这可能是一个简单的问题,但我到处寻找并尝试了一些解决方法,但我仍然没有解决问题。

问题描述: 我必须替换文件中的一个字符,我可以使用命令行轻松完成:

sed -e 's/pattern1/pattern2/g' full_path_to_file/file

但是当我在 bash 脚本中使用同一行时,我似乎无法替换它,而且我没有收到错误消息,只是没有替换的文件内容。

#!/bin/sh

VAR1="patter1"
VAR2="patter2"

VAR3="full_path_to_file"

sed -e 's/${VAR1}/${VAR2}/g' ${VAR3}

任何帮助将不胜感激。

非常感谢您的宝贵时间。

【问题讨论】:

  • sed -e 不改变文件,只显示带有替换的文件,但无论哪种情况,文件都不会改变

标签: bash sed shell


【解决方案1】:

试试

sed -e "s/${VAR1}/${VAR2}/g" ${VAR3}

Bash reference 说:

字符“$”和“`”在双引号中保留其特殊含义

因此它将能够解析您的变量

【讨论】:

【解决方案2】:

我使用像你这样的脚本......我的也可以!

#!/bin/sh

var1='pattern1'
var2='pattern2'

sed -i "s&$var1&$var2&g" *.html

看到了,我使用的是“-i”...而我使用的分隔符“&”和你的不同。 分隔符“&”可以用于任何其他没有在模式中的字符。

你可以使用:

sed -i "s#$var1#$var2#g" *.html

sed -i "s@$var1@$var2@g" *.html

...

如果我的模式是:“test@email.com”,当然您必须使用不同的分隔符,例如“#”、“%”... 好吗?

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 2013-12-03
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    相关资源
    最近更新 更多