Как я могу удалить все строки, которые не начинаются с определенных символов?

StackOverflow https://stackoverflow.com/questions/1725265

Вопрос

Мне нужно вычислить регулярное выражение для удаления всех строк, которые не начинаются ни с "+", ни с "-".

Я хочу распечатать бумажную копию большого файла diff, но в нем отображается около 5 строк до и после фактического diff.

Это было полезно?

Решение

В VIM:

:g!/^[+-]/d

Вот перевод на английский:

gлобально сделайте что-нибудь со всеми строками, которые НЕ! сопоставьте регулярное выражение:начало строки^ за которым следует либо + или -, и что что - то нужно сделать , это dвыделите эти строки.

Другие советы

sed -e '/^[^+-]/d'

diff -u <some args here> | grep '^[+-]'

Или вы могли бы просто вообще не создавать дополнительные строки:

diff --unified=0 <some args>

cat your_diff_file | sed '/^[+-]/!D'
egrep "^[+-]" difffile >outputfile

Вместо удаления всего, что не соответствует, вы показываете только совпадающие строки.:)

Если вам нужно сделать что-то более сложное с точки зрения регулярных выражений, вам следует воспользоваться этим сайтом:http://txt2re.com/

он также предоставляет примеры кода для многих разных языков.

%!grep -Ev '^[+-]'

встроен ли он в текущий файл и может быть значительно быстрее, чем :v для больших файлов.

Протестировано на Vim 7.4, Ubuntu 14.04, файл журнала длиной в 1 строку.

Строки, которые не содержат word: https://superuser.com/questions/265085/vim-delete-all-lines-that-do-not-contain-a-certain-word/1187212#1187212

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top