1

У меня есть файл, который выглядит примерно так:

Heading - 
  - Completed foo
    - More information
    - Still more
  * Need to complete bar
  - Did baz (comment blah blah) ***

Another - 
  * Need to complete foo
  - Completed bar (blah comment blah) ***
  - Done baz

Мне нужно запустить текстовый файл через sed чтобы удалить все строки, которые начинаются с пробелов (число варьируется) и дефис и еще один пробел.

Какое регулярное выражение или шаблон мне нужно использовать с sed чтобы вывод был похож на это ниже?

Heading - 
  * Need to complete bar

Another - 
  * Need to complete foo

4 ответа4

3

Я использовал ответ Фоши при поддержке Денниса Уильямсона, чтобы помочь мне придумать sed /^\s+-\s.*/d который работает, как и ожидалось.

2

"s/\s*-\s.*//g" должен сделать это, я думаю.

Это \s, чтобы соответствовать пробелу, *, чтобы соответствовать нулю или более предыдущего символа (пробел), буквальный символ дефиса, затем другой пробел, затем.+, Чтобы соответствовать всему после него.

1

Вы должны использовать egrep или grep для этой задачи, sed - это потоковый редактор, grep больше соответствует философии line-at-time.

Вам нужно регулярное выражение, которое соответствует началу строки, пробела, дефиса, пробела. Похоже, это будет работать:

egrep  -v  '^[ ]+-[ ]' filename

Опция -v заставляет egrep УДАЛИТЬ совпадающие строки - это проще, чем создавать регулярное выражение, которое отклоняет строки.

Пример:

 nobody$ egrep -v  '^[ ]+-[ ]' /tmp/foof
 Heading - 
   * Need to complete bar

 Another - 
   * Need to complete foo
 nobody$ cat /tmp/foof
 Heading - 
   - Completed foo
     - More information
     - Still more
   * Need to complete bar
   - Did baz (comment blah blah) ***

 Another - 
   * Need to complete foo
   - Completed bar (blah comment blah) ***
   - Done baz
 nobody$ _

Работа с символами табуляции только означает, что они нужны в выражениях в скобках, но это трудно показать в Интернете.

0

Для фильтрации целых строк из вывода обычно grep , а не sed . В частности, чтобы исключить определенные строки, вам нужно использовать grep -v 'exclusion-regex' .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .