Я использовал ответ Фоши, которому помог Деннис Уильямсон, чтобы помочь мне придумать, sed /^\s+-\s.*/d
что работает, как и ожидалось.
используя sed для удаления строк в файле
У меня есть файл, который выглядит примерно так:
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 ответа на вопрос
- Популярные
- Новые
- С комментариями
- Активные
"s/\s*-\s.*//g"
Я должен сделать это, я думаю.
Это \ s, чтобы соответствовать пробелу, *, чтобы соответствовать нулю или более предыдущего символа (пробел), буквальный символ дефиса, затем другой пробел, затем. +, Чтобы соответствовать всему после него.
Вы должны использовать egrep или grep для этой задачи, sed - это потоковый редактор, grep больше соответствует философии line-at-time.
Вам нужно регулярное выражение, которое соответствует началу строки, пробела, дефиса, пробела. Похоже, это будет работать:
egrep -v '^[ ]+-[ ]' filename
-v
Опция заставляет УДАЛИТЬ задать расширенную совпадающие строки - это проще, чем построить регулярное выражение, которое отторгает линию.
Пример:
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$ _
Работа с символами табуляции только означает, что они нужны в выражениях в скобках, но это трудно показать в Интернете.
Для фильтрации целых строк из вывода, как правило, вы хотите grep
, а не sed
. В частности, чтобы исключить определенные строки, вы захотите использовать grep -v 'exclusion-regex'
.
Похожие вопросы
-
14
Regex инструмент для Linux
-
3
Не могу понять, почему это регулярное выражение не применяется
-
3
Как я могу создать оглавление для документа уценки с помощью Python / AWK / SED?
-
-
2
Удаление новых строк из файла RTF с помощью sed
-
5
Grep инструмент для XML
-
4
Какая польза от? в команде grep .. и практическое использование
-
13
Разбор текстовых файлов
-
1
Есть ли противоположность: g в vim?
-
4
получение заголовков / блоков комментариев
-
1
Замените имя файла на filepath на sed