Как я могу удалить все строки, которые не начинаются с определенных символов? - PullRequest
28 голосов
/ 12 ноября 2009

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

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

Ответы [ 7 ]

55 голосов
/ 12 ноября 2009

В VIM:

:g!/^[+-]/d

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

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

1 голос
/ 12 ноября 2009

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

0 голосов
%!grep -Ev '^[+-]'

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

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

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

0 голосов
/ 12 ноября 2009

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

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

0 голосов
/ 12 ноября 2009
egrep "^[+-]" difffile >outputfile

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

0 голосов
/ 12 ноября 2009
cat your_diff_file | sed '/^[+-]/!D'
0 голосов
/ 12 ноября 2009

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

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

diff --unified=0 <some args>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...