Как удалить определенные строки в определенной области?

sudo adduser timothy создает пользователя с именем timothy. Он не создает пользователя sudo по имени timothy. Чтобы предоставить Тимоти некоторые привилегии sudo, вам нужно отредактировать файл sudoers, например добавьте эту запись, чтобы разрешить Тимати запускать любую команду от имени пользователя root без повторного ввода своего пароля.

timothy ALL=(ALL) NOPASSWD: ALL
1
14.09.2018, 20:27
2 ответа

Не знаком с YFM ( предварительная часть YAML ), но согласно этой странице он должен быть первым в файле и должен принимают форму действительного набора YAML между линиями, пунктирными линиями . Это означает, что ваш файл всегда будет начинаться с --- , если присутствует YFM , поэтому вы можете запустить:

sed -n '1{/^---$/!q};1,/^---$/{/^Title: \|^Place: /d};p' infile

т.е. если первая строка не соответствует --- q uit, в противном случае d удаляет все строки, соответствующие этим шаблонам, если они встречаются между 1 st строка и следующая строка соответствуют ---
Если второй маркер - ... , просто измените второе выражение sed , но обратите внимание, что для сопоставления буквальной точки вы Придется сбежать, например, чтобы соответствовать ... , вы должны использовать \. \. \. или \. \ {3 \} ):

sed -n '1{/^---$/!q};1,/^\.\.\.$/{/^Title: \|^Place: /d};p' infile
2
29.04.2021, 00:30

Помимо решения heemayl sed, также есть опция grep:

grep -Ev '^Title:|^Place:' file.txt

Объяснение:

  • grep -v для игнорирования строк, содержащих заголовок: или место:
  • grep -E для объединения двух терминов
  • ^ указывает, что шаблоны должны быть в начале строки
0
29.04.2021, 00:30

Теги

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