如何保留以X标准开头的句子并删除符合Y标准的句子。 使用vim,我想删除所有不以void开头的句子。
void set_first_name(string in_first_name);
string first_name();
void set_last_name(string in_last_name);
string last_name();
void set_composer_yob(int in_composer_yob);
int composer_yob();
void set_composer_genre(string in_composer_genre);
string composer_genre();
void set_ranking(int in_ranking);
int ranking();
void set_fact(string in_fact);
答案 0 :(得分:3)
vim命令:g和:v help here。
:g/regex/action
'g'全局选择与正则表达式匹配的所有行并将操作应用于它们。 'v'反转正则表达式(如grep -v),因此将操作应用于所有不匹配的行。
所以要删除所有不以void开头的行:
:v/^void/d
其中'd'是删除该行的操作。
答案 1 :(得分:0)
通常,这方面的正则表达式如下:
^(?!\s*void).*\n
即,匹配行的开头(^
),然后声明您无法在此处匹配void
,可选地前面有空格,然后匹配所有字符,直到以下换行符。
看来(感谢@Al)vim通过不同的语法支持前瞻(\@!
表示否定,\@=
表示正向前瞻),因此这种模式可以转换为
^(\@!\s*void).*\n