Intereting Posts
Как искать .local? emacs, Как скопировать регион и оставить его выделенным? Как загружать модули при запуске в определенном порядке? Как исправить зависимости gtk? полная разбивка KVM / libvirt после обновления ОС (openSUSE) Daemon – как рассказать начальному демонам выполнить этот демон как другое имя пользователя, чем root? Удалить первый экземпляр строк с двойным значением поля Как я могу настроить привязку пользовательских ключей даже в SSH-ed на другой компьютер? Системный язык Linux Mint 14 превращается в китайский. Как я могу вернуться на английский язык? Пользовательская установка для настраиваемого Debian Distro? В `dmesg | head`, (как) dmesg убивается после 10 строк вывода? Как проверить использование диска в ftp? find: список всех каталогов, кроме номеров с именами и именами их детей Что делает `join ‘с точки зрения равноценности в SQL или операций в реляционной алгебре? Сравнить и объединить конфигурационный файл в CentOS

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

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

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

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

 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.