回答:
最初にsedのフラグなしでテストする-i
か、rc.local
ファイルのローカルコピーを使用することをお勧めします。
文字列の存在をテストする必要はありませんが、そうする場合、grepの出力を置換する正しい方法は"$(grep tvservice /etc/rc.local)"
-文字列をテストして書いた方法です$grep tvservice /etc/rc.local
ただし、IMHOのより良い方法は、パターン全体をgrepし、grepの終了ステータスを直接使用して、シェルの正規表現テストを完全に回避することです。
if grep -q '^#.*tvservice' /etc/rc.local; then
sed -i '/^#.*tvservice/ s/^#//' /etc/rc.local
else
echo 1
fi
(サンプルテキストにスペースがないため、パターンの周りのスペースを削除しました)。