команда ed: удалить от строки 1 до первой пустой строки

команда ed: удалить от строки 1 до первой пустой строки

Я наткнулся на этот код в учебнике; в книге сказано только, что это 1,/^[ ]*$/d означает «Удалить от строки 1 до первой пустой строки». Что конкретно означает каждый символ?

ed $1 << EOF
    1,/^[ ]*$/d
    w
    q
EOF

решение1

1,/.../означает диапазон от 1-й строки до строки, соответствующей шаблону между /.

/^[ ]*$/соответствует строке, содержащей 0 или любое количество пробелов [ ]*от начала ^до конца $строки.
Неясно, является ли код в вопросе намеренным и является ли он точной копией из книги. Скобки вокруг одного пробела не нужны. Возможно, оригинальный автор хотел, чтобы между скобками был пробел и символ табуляции, которые можно было бы заменить на класс символов [[:blank:]].

dэто команда для удаления строки

wнаписать файл

qвыйти из редактора

Эти команды отправляются edчерезздесь документ, обозначенное << EOF. EOFСтрока представляет собой полупроизвольное имя, которое связано с EOFчетырьмя другими строками ниже. Если оставить EOFбез кавычек, то все переменные в промежуточных строках будут расширены.

Еще одно, на что следует обратить внимание, это отсутствие кавычек в примере $1. edКоманда/скрипт будет выполнена для первого позиционного параметра (аргумента скрипта или функции)подлежит дальнейшему разделению пробелов и генерации имени файла. Аргумент действительно следует процитировать. Для дальнейшего чтения см.Почему мой скрипт оболочки тормозит пробелы и другие специальные символы?иПоследствия для безопасности, если забыть заключить переменную в кавычки в оболочках bash/POSIX.

решение2

Команда и ввод

$1это имя файла, который необходимо отредактировать, а все, что находится между EOF, — это команды для редактирования ed.

Подробный рассказ о1,/^[ ]*$/d

  • 1,начать с линии1 и в этом случае продолжайте до первого появления строки поиска
  • /указывает, что мы собираемся искать строку
  • ^указывает, что мы хотим сопоставить начало строки в файле
  • [указывает, что мы собираемся указать много символов
  • ' ' мы хотим сопоставить пробел - обычно здесь было бы больше символов
  • ]завершено указание символов
  • *мы хотим сопоставить 0 или более пробелов (или любых других символов между [])
  • $до конца строки в файле
  • /закрытие поиска
  • dудалить строку

Затем следующая строка wзаписывает изменения и qзавершает работу ed.

Эффект

Если первая строка файла ( $1) пуста или содержит только пробелы (без табуляции), то она будет удалена.

Связанный контент