Как я могу удалить все строки, которые не начинаются с определенных символов?
-
19-09-2019 - |
Вопрос
Мне нужно вычислить регулярное выражение для удаления всех строк, которые не начинаются ни с "+", ни с "-".
Я хочу распечатать бумажную копию большого файла 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