Что делает команда sed в строке ниже?

Я анализировал файл сценария, и я наткнулся на строку ниже

sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh 

Я до сих пор не могу понять, что делает эта команда. Я знаю -i означает, что это встроенная операция. Но то, что он делает, до сих пор неизвестно мне. Пожалуйста, помогите мне понять эту строку.

2 Solutions collect form web for “Что делает команда sed в строке ниже?”

 sed -i 

-i говорит, чтобы редактировать файл на месте, то есть написать новую версию с тем же именем

 /JBOSS_HOME\/bin\/run.sh/ 

Образец, разделенный косой чертой, слэши, содержащиеся в шаблоне, цитируются JBOSS_HOME/bin/run.sh косыми чертами, поэтому это соответствует любой строке, содержащей JBOSS_HOME/bin/run.sh (На самом деле, поскольку это регулярное выражение, точка соответствует любому символу.)

 i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' 

Команда для запуска, когда шаблон совпадает, i предназначен для вставки строки (до текущего). Строка, которую нужно добавить, разделяется export TMP_FOLDER=$JBOSS_HOME/server/default/tmp , поэтому это добавляет строку export TMP_FOLDER=$JBOSS_HOME/server/default/tmp .

 /home/jboss/runJBOSSEAP.sh 

Название целевого файла.

например

 $ echo JBOSS_HOME/bin/run.sh > pla $ sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' pla $ cat pla export TMP_FOLDER=$JBOSS_HOME/server/default/tmp JBOSS_HOME/bin/run.sh 

Это почти то же самое, что, например, пример здесь

Ответ ilkkachu великий и обширный, отдаленный дан. Вот лишь побочная заметка, если вы используете BSD sed (как в OS X). Эта:

 sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo sed: 1: "foo": invalid command code f 

Не работает. Чтобы он работал с BSD sed, вам сначала нужно исправить параметр -i следующим образом: sed -i."" . Кроме того, вам нужно иметь свою вставку в отдельной строке, например:

 sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \ export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo 

Но опять же, это просто, если вы используете BSD sed, как показано в OS X. Не применяется к GNU sed.

  • как сопоставить несколько шаблонов и изменить одну часть с sed
  • Замена захваченной группы с помощью SED
  • итерации через файлы ('для файла в ...), а также включить подкаталоги?
  • Как я могу поменять значение на строке?
  • Замена многострочных последовательных тегов одной строкой с использованием sed и игнорирование пробелов
  • группы захвата sed не работают
  • Замените LF CRLF в начале файла
  • Как отредактировать следующую строку после шаблона с помощью sed?
  • Sed: заменить одну / две цифры (-ы)
  • Sed: Ищите IP-адрес между диапазонами?
  • Почему `sed` не возвращает статус выхода, если регулярное выражение не соответствует?
  • Linux и Unix - лучшая ОС в мире.