説明する

説明する

スクリプトの変数値をに置き換えようとしましたが、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

おすすめ記事