bash - sed: -e 式 #1、文字 15: 終了していない 's' コマンド

bash - sed: -e 式 #1、文字 15: 終了していない 's' コマンド

sedIPアドレスを置き換えるためにループ内でコマンドを試しましたが、常に次のエラーが発生します。

sed: -e expression #1, char 15: unterminateds「コマンド」

閉じるスラッシュが欠けていない場合でも同様です。

IPアドレス形式の例:26.236.16.233

これは私のコードです。

readarray thearray < /root/scripts/ipaddr.info
Filepath=/var/named/chroot/var/named/$Serverdmn

 for item in ${!thearray[@]}; do
    echo -e "IP: ${thearray[$item]}."
    echo -e "Change this IP? (y/n)"
    read Useranswer
    if [ $Useranswer = y ]; then
        echo -e "Please type the IP address:"
        read Firstipaddress

        oldipaddr=${thearray[$item]}
        new_oldipaddr=${oldipaddr%.*}.0

        newipaddr=$Firstipaddress
        new_ipaddr=${newipaddr%.*}.0            

        # do the change on all files
        sed -i "s/$oldipaddr/$Firstipaddress/g" /root/scripts/ipaddr.info
        sed -i "s/$oldipaddr/$Firstipaddress/g" /etc/application/config
        sed -i "s/$oldipaddr/$Firstipaddress/g" $Filepath
        sed -i "s/$new_oldipaddr/$new_ipaddr/g" $Filepath

    elif [ $Useranswer = n ]; then
                :
    fi
done

ここでどのような問題が発生し、どのように解決しますか?

ベストアンサー1

$oldipaddr(で得られた)値${thearray[$item]}には、から読み取られた改行文字が含まれており、/root/scripts/ipaddr.infoコマンドsedは複数行に分割されます。

Please type the IP address:
1.2.3.4
sed -i s/26.236.16.233
/1.2.3.4/g /root/scripts/ipaddr.info

努力する

readarray -t thearray < ipaddr.info

~からhelp mapfile

      -t        Remove a trailing newline from each line read.

おすすめ記事