Как использовать «sed» для автоматизации изменений в конфигурационном файле? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать скрипт, который динамически находит номера строк в файле конфигурации .groovy, а затем использует команду «head / tail» для вставки нескольких строк кода в файл конфигурации .groovy.Я не могу жестко закодировать номера строк в скрипте, потому что поставщик может изменить конфигурацию и порядок номеров строк в будущем.У кого-нибудь есть предложения, как лучше всего это сделать?

EX.)

1: это первая строка

2: это вторая строка

Проблема: мне нужно вставить:

test {
   test{
     authenticationProvider     =/random/path
   }
}

Я не могу жестко закодировать числа лжи в sed, потому что они могут измениться в будущем.Как я могу динамически заставить sed найти подходящий номер строки и вставить несколько строк кода в правильном формате?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Предполагая, что вы можете найти номер строки, вы можете сделать это довольно легко с помощью bash-скрипта:

файл insert-lines.sh:

#!/bin/bash

MYLINE=$1
FILE=$2
head -$MYLINE < $FILE
cat <<__END__
test {
  test{
    authenticationProvider     =/random/path
  }
}
__END__
tail +$((MYLINE+1)) $FILE

Тогда вы можете запустить это:

chmod 755 insert-lines.sh
./insert-lines.sh 3 .groovy > .groovy.new
mv .groovy.new .groovy

и скрипт вставит блок между строками 3 и 4 файла .groovy.

Обратите внимание, что я предполагаю недавний дистрибутив Linux, который поддерживает синтаксис tail +n, который выводит конец файла, начиная со строки n . Вам придется заменить эту часть кода, если ваша версия tail не поддерживает ее.

0 голосов
/ 23 января 2019

это должно сделать

$ line_num=2; seq 5 | sed "${line_num}r insert"

1
2
test {
   test{
     authenticationProvider     =/random/path
   }
}
3
4
5

для вставки текста помещается в файл с именем insert. Поскольку примера файла ввода нет, я сгенерировал последовательность из 5 как источник ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...