Удалить строки из шаблона до следующей пустой строки

Я не уверен, где вы могли видеть эту работу, но ifявляется ключевым словом оболочки и используется для тестовых конструкций; это не команда и, следовательно, ее нельзя вызывать с обычной опцией --help. Вместо этого он заблокируется и будет ждать дальнейшего ввода (, то есть тестового оператора ), пока вы не нажмете Ctrl-Cдля принудительного выхода из запущенной команды.

Если вам нужна помощь в использовании ключевого слова ifв сценариях оболочки, хорошей отправной точкой может стать Справочное руководство по Bash или Руководство по Bash от Lhunath & GreyCat .

-2
08.05.2021, 00:56
3 ответа

cshи bash— это оболочки, не предназначенные для обработки текста, но из этих оболочек можно вызвать утилиту обработки текста, например sed. С помощью sedвы можете удалить диапазон строк между двумя шаблонами, подобными этому:

sed '/^fruits:/,/^$/d' yourfile

Пояснение :Шаблон ^fruits:соответствует строкам, начинающимся с fruits:, шаблон ^$соответствует пустой строке(^— начало строки, $— конец строки ). Разделение этих шаблонов с помощью ,означает, что следующая команда будет применена ко всем строкам в этом диапазоне, и эта командаd(удалить ).

6
28.07.2021, 11:34

Если это файл YAML и вы хотите удалить раздел fruits, лучше всего использовать для него инструмент, поддерживающий YAML -, например yqиз https://kislyuk.github.io/yq/:

.
$ yq -y 'del(.fruits)' file
pets:
  - cat
  - dog
  - fish
colors:
  - red
  - blue
  - pink
3
28.07.2021, 11:34

Использованиеawk:

awk '{arr[NR]=$0}/fruits/,/^$/ { if (/fruits/) line1=NR; if (/^$/) line2=NR}END{for(j=line1;j<=line2;j++) delete arr[j] ; for (i in arr) print arr[i]}' file

 pets:
 - cat
 - dog
 - fish

 colors:
 - red
 - blue
 - pink

В основном блоке сначала создается массив arr, который индексируется в записи. числа.

Затем с этим выражением if (/fruit/) line1=NR;первая строка соответствует закономерность найдена. Аналогично находится следующая пустая строка. Теперь элементы из массив arrмежду этими записями и элементы arr, содержащие эти записи, удаляются.

В блоке ENDцикл for печатает оставшиеся строки.

0
28.07.2021, 11:34

Теги

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