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