AWK вставляет строку после первого совпадения и вставляет пустую строку, если следующая строка не является шаблоном

При переустановке я сделал две вещи по-другому:

  • Мой корневой раздел должен был быть указан как Solaris RootвместоLinux Filesystem

  • Я создал отдельный каталог /bootс файловой системой ext4

Один из них решил мою проблему, но я не уверен, какой именно.

1
03.02.2021, 01:36
2 ответа

Я думаю, проблема в том, что вы сначала печатаете строку, а затем решаете выполнить другую обработку, а не сначала выполняете вставку, а затем печатаете строку.

Вы хотите вставить новый материал через 2 строки после магического маркера, а также добавить туда пустую строку, если строка начинается с #.

awk '/#InsertPart/ { c = 3 }
     --c == 0 { print "- new inserted line" }
     c == 0 && /^#/ { print "" }
     {print $0}'

Я записал код прямым способом, а не самым коротким, (например. "{print $0}", а не "1" ), чтобы было понятнее. --c == 0уменьшает c и сравнивает новое значение c с 0.

1
18.03.2021, 22:32

попробуй

awk -v line='- new inserted line' '/#InsertPart/ {printf "%s\n\n%s\n", $0, line; next}; 1' yourfilename
0
18.03.2021, 22:32

Теги

Похожие вопросы