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

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

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

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

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

решение1

sed -i  

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

/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.

/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

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

решение2

Ответ 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.

Связанный контент