我是一个尝试将我的IP地址返回给变量的n00b,然后在bash脚本中的sed命令中使用该变量。我试图更换文本' mycomputer'在我的IP地址没有太多运气的文件中。
以下是我的尝试:
localip=`ipconfig getifaddr en0`
sed -i '' “s/mycomputer/$localip/” config.txt
我收到的错误是:
sed: 1: "“s/mycomputer/192.168 ...": invalid command code ?
localip=`ipconfig getifaddr en0`
sed -i '' 's/mycomputer/$localip/g' config.txt
更改' mycomputer'到' $ localip' - 不是实际的IP地址
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
答案 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