删除两个连续行的第一行中具有相同字符串的第一行的开头

时间:2019-04-28 07:55:58

标签: text vim sed

我正在处理文本文件(从facebook组复制和粘贴),我已经用sed命令组去除了所有字符串“ Like”,“ Comment”,注释号等。我剩下的行看起来像这样:

Jane Doe
Jane Doe Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Donec ac urna ut quam sagittis placerat id vitae justo. 
John Doe
John Doe Maecenas id justo tempus, auctor velit in, porta nibh. 
John Doe
John Doe Maecenas id justo tempus, auctor velit in, porta nibh. 
Fred Crun
Fred Crun Maecenas id justo tempus, auctor velit in, porta nibh. Mauris bibendum et ligula molestie faucibus. Nullam feugiat tristique sapien non fringilla. 
Fred Crun
Fred Crun Maecenas id justo tempus, auctor velit in, porta nibh. Mauris bibendum et ligula molestie faucibus. Nullam feugiat tristique sapien non fringilla.
Frank Zappa
Frank Zappa Suspendisse malesuada libero id tortor scelerisque feugiat. Suspendisse vel feugiat est. Vestibulum vel nisl magna. Aenean viverra diam vel vulputate pulvinar. In hac habitasse platea dictumst.

我正在寻找sed或其他Unix实用程序的正则表达式,该正则表达式将删除行名,且后面没有其他文本,使行看起来像这样:

Jane Doe Lorem ipsum dolor sit amet, consectetur adipiscing elit.
John Doe Maecenas id justo tempus, auctor velit in, porta nibh.
John Doe Maecenas id justo tempus, auctor velit in, porta nibh.
Fred Crun Maecenas id justo tempus, auctor velit in, porta nibh. Mauris bibendum et ligula molestie faucibus. Nullam feugiat tristique sapien non fringilla
Fred Crun Maecenas id justo tempus, auctor velit in, porta nibh. Mauris bibendum et ligula molestie faucibus. Nullam feugiat tristique sapien non fringilla.
Frank Zappa Suspendisse malesuada libero id tortor scelerisque feugiat. Suspendisse vel feugiat est. Vestibulum vel nisl magna. Aenean viverra diam vel vulputate pulvinar. In hac habitasse platea dictumst.

在这里颂歌

。我查看了uniqgvim中的regep的几个示例,但是我找不到实现目标的方法。名称可以包含3个单词。

3 个答案:

答案 0 :(得分:2)

这可能对您有用(GNU sed):

sed -E 'N;/^(.*)\n\1./!P;D' file

在文件的整个长度上打开一个两行窗口。

如果第一行的全部与第二行的开头相同,请不要打印。

删除第一行并重复。

答案 1 :(得分:0)

在Vim中,您可以执行以下操作:

:%s/^\(.*\)\n\1/\1

先寻找一行,然后是\n和同一行(可能再加上一些东西,但未指定),然后将其替换为找到的模式,删除第一部分。

答案 2 :(得分:0)

如果您的数据位于d文件中,请尝试使用gnu sed:

sed -E '/^\w+\s\w+\s*$/{N;s/([^\n]+)\n(\1.+)/\2/;b};d' d