sed / awk: удаление линий из шаблона в шаблон - PullRequest
0 голосов
/ 19 июля 2011

Одна из моих конфигураций имеет определенный раздел foo:

# Configuration foo - Start
blah
blah
blah
# Configuration foo - End

Я хотел бы применить изменения к этому разделу, заменив его содержимым другого файла (например, new_foo.txt).Раздел всегда начинается с # Configuration foo - Start и заканчивается # Configuration foo - Start

Какой лучший способ сделать это в экосистеме Ubuntu \ bash?Я могу написать небольшой скрипт на Python, но я подозреваю, что для этого может быть элегантный однострочный.

Ответы [ 3 ]

4 голосов
/ 19 июля 2011
sed -e '/^# Configuration foo - Start$/r new_foo.txt' -e '/^# Configuration foo - Start$/,/^# Configuration foo - End$/d'
3 голосов
/ 19 июля 2011
{
  sed -n '0,/^# Configuration foo - Start$/p' infile
  cat new_foo.txt
  sed -n '/^# Configuration foo - End$/,$p' infile
} > outfile

Если вы поместите все это в одну строку, не забудьте поставить ; и пробел перед }.

1 голос
/ 19 июля 2011

Если предположить, что new_foo.txt достаточно мало, чтобы быть в памяти, это работает для меня:

awk 'NR==FNR {A[i++] = $0} NR>FNR && !exclude {print $0} /# Configuration foo - Start/ {exclude=1; for (line in A) { print line }} /# Configuration foo - End/ {exclude=0; print$0}' new_foo.txt config
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...