Я не уверен, где вы могли видеть эту работу, но if
является ключевым словом оболочки и используется для тестовых конструкций; это не команда и, следовательно, ее нельзя вызывать с обычной опцией --help
. Вместо этого он заблокируется и будет ждать дальнейшего ввода (, то есть тестового оператора ), пока вы не нажмете Ctrl-C
для принудительного выхода из запущенной команды.
Если вам нужна помощь в использовании ключевого слова if
в сценариях оболочки, хорошей отправной точкой может стать Справочное руководство по Bash или Руководство по Bash от Lhunath & GreyCat .
csh
и bash
— это оболочки, не предназначенные для обработки текста, но из этих оболочек можно вызвать утилиту обработки текста, например sed
. С помощью sed
вы можете удалить диапазон строк между двумя шаблонами, подобными этому:
sed '/^fruits:/,/^$/d' yourfile
Пояснение :Шаблон ^fruits:
соответствует строкам, начинающимся с fruits:
, шаблон ^$
соответствует пустой строке(^
— начало строки, $
— конец строки ). Разделение этих шаблонов с помощью ,
означает, что следующая команда будет применена ко всем строкам в этом диапазоне, и эта командаd
(удалить ).
Если это файл YAML и вы хотите удалить раздел fruits
, лучше всего использовать для него инструмент, поддерживающий YAML -, например yq
из https://kislyuk.github.io/yq/:
$ yq -y 'del(.fruits)' file
pets:
- cat
- dog
- fish
colors:
- red
- blue
- pink
Использование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 печатает оставшиеся строки.