在sed中使用变量

时间:2014-12-15 21:53:44

标签: bash sed terminal ipconfig

我是一个尝试将我的IP地址返回给变量的n00b,然后在bash脚本中的sed命令中使用该变量。我试图更换文本' mycomputer'在我的IP地址没有太多运气的文件中。

以下是我的尝试:

1

localip=`ipconfig getifaddr en0`
sed -i '' “s/mycomputer/$localip/” config.txt

我收到的错误是:

sed: 1: "“s/mycomputer/192.168 ...": invalid command code ?

2

localip=`ipconfig getifaddr en0`
sed -i '' 's/mycomputer/$localip/g' config.txt

更改' mycomputer'到' $ localip' - 不是实际的IP地址

3

localip=`ipconfig getifaddr en0`
sed -i '' 's/mycomputer/‘“$localip”’/g’ config.txt

错误:

./mytest.sh: line 5: unexpected EOF while looking for matching `''
./mytest.sh: line 6: syntax error: unexpected end of file

有什么想法吗?!?!

修改

这适用于bash脚本,如下所示:

#!/bin/bash

cd "`dirname "$0"`"
localip=`ipconfig getifaddr en0’
sed -i '' "s/mycomputer/$localip/" config.txt

2 个答案:

答案 0 :(得分:0)

你的双引号错了:

sed -i '' “s/mycomputer/$localip/” config.txt

这应该有用(注意区别):

sed -i '' "s/mycomputer/$localip/" config.txt

实际上你在其他方面也有类似的问题。所以完整的脚本,更正:

#!/bin/bash    
cd $(dirname "$0")
localip=$(ipconfig getifaddr en0)
sed -i '' "s/mycomputer/$localip/" config.txt

请注意,-i ''适用于sed的BSD版本(在BSD系统和MAC中)。在Linux中,你用这种方式编写相同的东西:

sed -i "s/mycomputer/$localip/" config.txt

答案 1 :(得分:0)

尝试使用

您正在进行替换,因此无需sed -i ''并尝试使用shell默认引号"

如果您在脚本中使用sed ,只需用双qoutes包含变量$localip,以便bash可以进行替换。

sed -i s/mycomputer/"$localip"/ config.txt