У меня есть файл, который выглядит примерно так:
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
удалить все строки, которые запускаются с пробелов (число варьируется), и дефис и другое пространство.
Каковы regex или шаблон, с которым я должен использовать sed
заставить вывод быть похожим на это ниже?
Heading -
* Need to complete bar
Another -
* Need to complete foo
Я использовал ответ Phoshi, которому помогает Dennis Williamson, чтобы помочь мне придумать sed /^\s+-\s.*/d
который работает как ожидалось.
"s/\s*-\s.*//g"
должен сделать это, я думаю.
Это - \s для соответствия пространству, * для соответствия нулю или большему количеству предшествующего символа (пространство), литеральный символ дефиса, затем другое пространство, затем. + для соответствия всему после него.
Необходимо использовать egrep, или grep для этой задачи, sed является потоковым редактором, grep больше соответствует line-at-a-time философии.
Вам нужен regex, который соответствует запуску строки, пробела, дефиса, пространства. Кажется, что это работало бы:
egrep -v '^[ ]+-[ ]' filename
-v
опция заставляет egrep УДАЛЯТЬ согласующие отрезки длинной линии - это легче, чем создание regex, который отклоняет строки.
Пример:
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'
.
+
вместо*
для проверки существует по крайней мере одно пространство. опечатка – Paused until further notice. 06.11.2009, 20:39