sed
IPアドレスを置き換えるためにループ内でコマンドを試しましたが、常に次のエラーが発生します。
sed: -e expression #1, char 15: unterminated
s「コマンド」
閉じるスラッシュが欠けていない場合でも同様です。
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.