스크립트의 변수 값을 로 바꾸려고 하는데 sed
지금까지의 결과는 변경된 변수가 stdout
스크립트가 아닌 에 기록되는 것입니다.
내가 뭘 잘못했나요?
이것은 내 스크립트입니다.
#!/bin/bash
# si es la primera vez, hacemos una copia de nuestro /etc/hosts
ls /etc/hosts.old &> /dev/null
if [ $? -ne 0 ]; then
cp /etc/hosts /etc/hosts.old
fi
# comprobamos con curl si el documento se modifico en el servidor
OLD="Nov"
NEW=`curl -sI http://winhelp2002.mvps.org/hosts.txt| grep Last-Modified|awk '{print $4}'`
if [ $OLD != $NEW ]; then
#wget http://winhelp2002.mvps.org/hosts.txt -O /root/hosts.txt
#cat /root/hosts.txt|uniq >> /etc/hosts
# actualizamos la variable OLD si cambió
sed -n "/OLD=/ cOLD=${NEW}" /root/addblock.sh
else
echo " el archivo no se modifico"
fi
exit
출력은 다음과 같습니다.
# ./addblock.sh # OLD=Dec #
답변1
당신이 하고 있는 "잘못된" 일은 sed에게 행 변경을 요청했지만 해당 출력을 원하는 파일로 다시 캡처하지 않는 것입니다. 기본적으로 sed는 표준 출력으로 인쇄합니다.
의견에서 알 수 있듯이 -i
(GNU) sed 옵션을 사용하여 "제자리"를 편집하거나 리디렉션을 사용할 수 있습니다.
sed -i -n "/OLD=/ cOLD=${NEW}" /root/addblock.sh
또는
cp -p /root/addblock.sh.prev && \
sed -n "/OLD=/ cOLD=${NEW}" /root/addblock.sh.prev > /root/addblock.sh
답변2
파일을 /root/addblock.sh
어딘가에 저장하세요. 지시문을 바꾸십시오.
sed -n "/OLD=/ cOLD=${NEW}" /root/addblock.sh
이 명령을 통해:
sed -i.bak "s/OLD=/cOLD=${NEW}/" /root/addblock.sh
설명하다
이 옵션은 -i
파일을 직접 변경하는 데 사용되며 .bak
원본 내용을 저장하는 데 사용됩니다./root/addblock.sh
/root/addblock.sh.bak
s in은 대체 명령 s/OLD=/cOLD=${NEW}/
이며 , 이것이 없으면 동일하게 작동합니다 .sed
sed
grep