Sed没有在bash脚本中工作

时间:2010-06-10 15:06:11

标签: bash sed shell

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

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

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}

任何帮助都将不胜感激。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:26)

尝试

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

Bash reference说:

  

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

因此,它将能够解决您的变量

答案 1 :(得分:0)

我使用像你这样的剧本......我的作品也是如此!

export const contacts = 
  {"name": "mkyong",
    "age": 30,
    "address": {
        "streetAddress": "88 8nd Street",
        "city": "New York"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "111 111-1111"
        },
        {
            "type": "fax",
            "number": "222 222-2222"
        }
    ]
};

看到,我的使用“-i”......和分隔符“&”我使用的与你的不同。 分隔符“&”可以使用任何其他没有格局的角色。

您可以使用:

#!/bin/sh

var1='pattern1'
var2='pattern2'

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

...

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