簡體   English   中英

如何從指定文件中替換IP地址

[英]how to Replace IP Address from in specified file

我有以下腳本為此,它替換了指定文件中的每個ip,但是邏輯不好

while getopts i:h: opt
do
   case $opt in

       i)
    echo "Proposed ip will $OPTARG"
    if [[ $OPTARG =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then

    sed -i 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$/'$OPTARG'/g' sample.txt 

    echo "proposed ip is $OPTARG"
    else
    echo "fail to update"
    fi ;;

       h) ;;
  esac
done

`

想要將所有搜索到的IP地址存儲在陣列中替換它如何執行此操作

輸入文件是

ome 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 122.0.0.0
some log file entries
some log file entries
This system IP:122.0.0.0
some log file entries
some log file entries
some log file entries
Hostname:ip-172.31.18.255.ec2.internal
some log file entries
some log file entries

以下解決方案將允許您將所有匹配的IP地址存儲在陣列中,並在腳本的其他位置使用它們。 根據我的觀察(使用您的腳本),源文件中的所有IP地址都被替換了,但EC2專用主機名中包含的IP地址除外。 尚不清楚這是否是您想要的。 下面將替換所有IP地址(包括EC2主機名中包含的IP)。 我正在使用的正則表達式摘自本文中的可接受答案

#!/usr/bin/env bash

#
# Directory where this script is located
#
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

declare ips=()
declare ip_regex='[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
while getopts i:h: opt
do
   case $opt in

       i)
            echo "Proposed ip is $OPTARG"
            if [[ $OPTARG =~ ${regex} ]]; then
                # Store IPs in array for further processingg
                ips=$(echo $(cat "${DIR}/sample.txt") | grep -Eo ${ip_regex})

                for ip in ${ips[@]}; do
                    echo "Replacing '${ip}' with '${OPTARG}'"
                    sed -i 's/'${ip}'/'$OPTARG'/g' "${DIR}/sample.txt"
                done
            else
                echo "Failed to update"
            fi ;;

       h) ;;
  esac
done

如果您不想替換EC2主機名中包含的IP地址,則如下所示的正則表達式(我是根據本文的答案構建

declare ip_regex='(^|[[:space:]])[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}([[:space:]]|$)'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM