Я знаю, что это очень старая тема, и ОП на самом деле не нуждается в этом ответе, но я сам пришел сюда в поисках режима пробного запуска, поэтому подумал о том, чтобы добавить следующий совет для тех, кто придет сюда в будущем.То, что я хотел сделать, - это не топать файл резервной копии, если что-то действительно не меняется.Если вы слепо запускаете sed, используя опцию -i
с суффиксом резервной копии, существующий файл резервной копии перезаписывается, даже когда ничего не подставляется.
Я закончил тем, что выполнил вывод sed в diff и посмотрел,что-то изменилось, а затем снова запустил sed с возможностью обновления на месте, что-то вроде этого:
if ! sed -e 's/string1/string2/g' $fpath | diff -q $fpath - > /dev/null 2>&1; then
sed -i.bak -e 's/string1/string2/g' $fpath
fi
В соответствии с вопросом OP, если требуется просто посмотреть, что изменится, то вместо запуска in-pacesed, вы можете сделать разность снова с некоторыми информативными сообщениями:
if ! sed -e 's/string1/string2/g' $fpath | diff -q $fpath - > /dev/null 2>&1; then
echo "File $fpath will change with the below diff:"
sed -e 's/string1/string2/g' $fpath | diff $fpath -
fi
Вы также можете захватить вывод в переменную, чтобы избежать повторения:
diff=$(sed -e 's/string1/string2/g' $fpath | diff $fpath -)
if [[ $? -ne 0 ]]; then
echo "File $fpath will change with the below diff:"
echo "$diff"
fi