Добавить строку в файл конфигурации из сценария bash?

Я пытаюсь найти, чтобы найти строку в файле конфигурации, а затем вывести две строки, чтобы вставить строку кода. Я пытался сделать это в awk / sed, но застрял на возврате каретки. Я не привязан к awk / sed, но ищет чистый способ добиться этого.

<Location /> Order allow,deny </Location> 

Затем добавьте строку в этот блок:

 <Location /> Order allow,deny Allow all </Location> 

  • Как использовать команду awk для вычисления разницы дат между двумя столбцами в одном файле?
  • Сравните файлы и переименуйте, если содержимое отличается
  • Сравните два числа, считанные из файла
  • может ли что-то помимо shebang установить переводчика?
  • Изображение проверки подлинности Linux существует на URL-адресе Apache
  • Имея аргументы $ line, переданные rsync при использовании опции --protect-args
  • Считать столбцы CSV и удалить
  • Условные аргументы
  • 4 Solutions collect form web for “Добавить строку в файл конфигурации из сценария bash?”

    awk можно использовать для этого. Следующий скрипт будет добавлять текст после обнаружения <Location /> .

     awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4) print " Allow all"} 1' infile 

    Для следующего входного файла:

     stuff <Location /> Order allow,deny </Location> more stuff 

    Этот скрипт создает:

     stuff <Location /> Order allow,deny Allow all </Location> more stuff 

    Если вы хотите заменить несколько разделов таким образом, тот же скрипт можно легко адаптировать:

     awk '/\<Location \/\>/{ start=1 } {if(start) ++start; if(start==4){print " Allow all"; start=0}} 1' infile 
     sed '/Order allow,deny/ aAllow all' < yourFile 

    Это выведет измененный файл в стандартный вывод . Если вы хотите изменить его на месте, то ( sed (1) ):

    -i [SUFFIX], –in-place [= SUFFIX]

      edit files in place (makes backup if SUFFIX supplied) 

    Объяснение:

     For each line that matches `/Order allow,deny/`: Execute command 'a' (append) with 'Allow all' as parameter 

    http://grymoire.com/Unix/sed.html – отличный ресурс, чтобы узнать больше о sed .

    Если вы просто слепо хотите добавить оператор Allow all после любого Order allow,deny то следующее sed будет работать

     sed -i 's/Order\ allow,deny/Order\ allow,deny\nAllow\ all/' <inputfilename> 

    Вы можете использовать Vim в режиме Ex:

     ex -sc '/Order allow,deny/a|Allow all' -cx file 
    1. добавить текст и новую строку

    2. x сохранить и закрыть

    Linux и Unix - лучшая ОС в мире.