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.

관련 정보