从文件中替换 IP 地址

Replace IP Address from file

Sample.txt 文件:

.........................
some log file entries
some log file entries
some log file entries
some log file entries
This system ip is not found
some log file entries
some log file entries
some log file entries
This system IP is 172.16.80.10
some log file entries
some log file entries
This system IP:172.16.80.10
some log file entries
some log file entries
some log file entries
Hostname::ip-172.16.80.10.ec2.internal
some log file entries
some log file entries
......................

我想替换文件中的 IP 地址而不是主机名,但它也在更改主机名。

我正在使用此命令替换 IP 地址:

sed s/172.16.80.10/172.16.80.12/g  sample.txt

获取输出

.........................
some log file entries
some log file entries
some log file entries
some log file entries
This system ip is not found
some log file entries
some log file entries
some log file entries
This system IP is 172.16.80.12
some log file entries
some log file entries
This system IP:172.16.80.12
some log file entries
some log file entries
some log file entries
Hostname::ip-172.16.80.12.ec2.internal
some log file entries
some log file entries
......................

(同时更改主机名)

期望的输出是

.........................
some log file entries
some log file entries
some log file entries
some log file entries
This system ip is not found
some log file entries
some log file entries
some log file entries
This system IP is 172.16.80.12
some log file entries
some log file entries
This system IP:172.16.80.12
some log file entries
some log file entries
some log file entries
Hostname::ip-172.16.80.10.ec2.internal
some log file entries
some log file entries
......................

代码示例:

while getopts i:h: opt
  do
  case $opt in
  i)
    CurrentLocalIpv4=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
    if [[ $OPTARG =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
      sed -i s/"$CurrentLocalIpv4"/"$OPTARG"/g /home/ec2-user/sample.txt
      echo "ip cahnged"
    else
      echo "fail"
    fi
    ;;
    h)
      echo"hostname"  ;;
   esac
 done

使用你的命令,你可以修改如下:

sed 's/172.16.80.10$/172.16.80.12/g' sample.txt

也就是说,告诉sed您只想更改要更改的IP并且后面没有更多字符的行(172.16.80.10$)。

如果你有修改IP的变量,($CurrentLocalIpv4),你可以这样写:

    sed 's/'$CurrentLocalIpv4'$/172.16.80.12/g' sample.txt