sed '5i\n\n\n' myfile вставляет первый \n как литерал n, а два других \n\n как новые строки, возможно ли вставить все 3 новые строки?

Como la mayoría de los programas, rsync devuelve un estado distinto de cero si se produce un error. Dado que tiene set -een la parte superior de la secuencia de comandos, su secuencia de comandos saldrá con un estado distinto de cero si rsync lo hace.

Si desea realizar alguna recuperación si falla rsync, puede continuar y analizar el estado. Con set -e, debe poner el comando rsync en un condicional para que el script no se cierre.

failures=0
…
  if rsync …; then
    echo "rsync succeeded"
  else
    echo "rsync failed"
    failures=$((failures+1))
  fi
…
if ((failures != 0)); then exit 1; fi

Si desea analizar el código de estado, un idioma común esstatus=0; rsync … || status=$?:este comando siempre devuelve un estado de éxito ya que el comando en el lado derecho -del operador ||siempre tiene éxito, y statusse establecerá en el estado del comando rsync.

  status=0
  rsync … || status=$?
  if ((status != 0)); then
    …
  fi
4
22.07.2019, 12:47
1 ответ

Стандартная sedвставка представляет собой

5i\
text here...

(включая обратную косую черту ). GNU sed имеет расширение , которое принимает текст в той же строке, что и команда i, но если после iесть обратная косая черта, это интерпретируется как обычное завершение команды -, хотя это все еще также не заставляет вас переходить на новую строку. Вы можете использовать

5i\\n\n\n

делать и то, и другое вместе. Это не экранированная обратная косая черта, а два разных вида обратной косой черты, расположенные рядом друг с другом. Такое поведение не задокументировано, но одинаково для команд и версий.


Возможно, вам будет проще использовать другое расширение GNU:

sed -e '5i\' -e '\n\n\n'

с разделением команды и текста на два -eаргумента, чтобы избежать двусмысленности.

11
27.01.2020, 20:47

Теги

Похожие вопросы