使用sed查找和替换?

时间:2014-07-08 09:59:49

标签: regex linux bash sed

我正在尝试替换此命令:

HOST_IP_ADDRESS=$(/sbin/ifconfig  | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d)

在我的多重脚本文件中一次尝试。我通过

来增加输出
 grep -R 'HOST_IP_ADDRESS' ./ -R | grep "127.0.0.1" | awk -F ":" '{print $2}'

我想用HOST_IP_ADDRESS = hostname -i而不是

替换结果
HOST_IP_ADDRESS=$(/sbin/ifconfig  | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d

是他们通过sed命令做的任何方式。

3 个答案:

答案 0 :(得分:0)

为什么要使用sed?也许你可以使用这个替代解决方案:

HOST_IP_ADDRESS=$(hostname -I | cut -f1 -d' ')

请参阅Putting IP Address into bash variable. Is there a better way

答案 1 :(得分:0)

如果我理解你,你想要替换它:

HOST_IP_ADDRESS=$(/sbin/ifconfig  | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d)

由:

HOST_IP_ADDRESS=$(hostname -i)

由于需要转义的字符,这有点难,请看下面的脚本:

#! /bin/bash

o='HOST_IP_ADDRESS=$(/sbin/ifconfig  | grep inet | grep -v 127.0.0.1 | awk '\''{print $2}'\'' | cut -d)'
n='HOST_IP_ADDRESS=$(hostname -i)'

echo "$o" > file
sed -e 's#'"$o"'#'"$n"'#g' file

其输出:

bash  test.sh 
HOST_IP_ADDRESS=$(hostname -i)

cat file
HOST_IP_ADDRESS=$(/sbin/ifconfig  | grep inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d)

关于你如何逃避的事情,你可以看到这个脚本在$o创建一个包含旧字符串的文件然后用新字符串$n替换,如果你想要的话为sed修改文件使用-i.bak而不是-e以确保您进行备份

答案 2 :(得分:0)

这将就地编辑您的文件,用$(hostname -i)替换ifconfig hack:

sed -i -e 's/\(HOST_IP_ADDRESS=\).*/\1$(hostname -i)/' filenames-go-here

先备份。

实际上它不会只是替换ifconfig hack,它将替换以HOST_IP_ADDRESS=开头的任何行