如何使用正则表达式查找并删除文件中的重复行? [关闭]

2023-11-30

这个问题与语言无关。仅使用正则表达式,我可以查找并替换文件中的重复行吗?

请考虑以下示例输入和我想要的输出;

输入>>

11
22
22  <-duplicate
33
44
44  <-duplicate
55

输出>>

11
22
33
44
55

Regular-expresss.info 有一个页面从文件中删除重复行

这基本上可以归结为寻找这个单行:

^(.*)(\r?\n\1)+$

... And replacing with \1.
Note: Dot must not match Newline

解释:

The caret仅在行的开头匹配。因此,正则表达式引擎只会尝试匹配正则表达式的其余部分。这dot and star组合仅匹配整行,无论其内容如何(如果有)。括号将匹配的行存储到第一个反向引用中。

接下来我们将匹配行分隔符。我把问号 into \r?\n使此正则表达式适用于两个 Windows (\r\n) 和 UNIX (\n) 文本文件。到目前为止,我们匹配了一行和下面的换行符。

现在我们需要检查该组合后面是否跟有同一行的重复项。我们简单地这样做\1。这是保存我们匹配的行的第一个反向引用。反向引用将匹配完全相同的文本。

如果反向引用无法匹配,则丢弃正则表达式匹配和反向引用,并且正则表达式引擎在下一行的开头再次尝试。如果反向引用成功,则加号正则表达式中将尝试匹配该行的其他副本。最后,美元符号强制正则表达式引擎检查反向引用匹配的文本是否是完整的行。我们已经知道反向引用匹配的文本前面有一个换行符(由 \r?\n 匹配)。因此,我们现在使用以下命令检查它后面是否也跟着换行符或者是否位于文件末尾美元符号.

整场比赛变成line\nline (or line\nline\nlineETC。)。因为我们正在进行搜索和替换,所以该行、其重复项以及它们之间的换行符都将从文件中删除。由于我们想保留原始行,而不是重复行,因此我们使用\1作为将原始行放回的替换文本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式查找并删除文件中的重复行? [关闭] 的相关文章

  • Java 中的正则表达式,\\s 与 \\s+

    下面两个表达式有什么区别 x x replaceAll s x x replaceAll s 第一个匹配单个空格 而第二个匹配一个或多个空格 它们是所谓的正则表达式量词 它们执行像这样的匹配 取自文档 http docs oracle co
  • 使用正则表达式解析 Snort 警报文件

    我正在尝试使用 Python 中的正则表达式从 snort 警报文件中解析出源 目标 IP 和端口 和时间戳 示例如下 03 09 14 10 43 323717 1 2008015 9 ET MALWARE User Agent Win9
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 当我尝试获取 [" 和 ", (有代码)之间的所有子字符串时,如何修复此错误?

    我有字符串 new y new york 0 new york times 0 我想要这些字符串之间 and new york new york times 我尝试了这个功能 public MatchCollection s s Regex
  • sed 替换 json 对象中键的值

    我想做什么 给定一个 json 事件文件 我想通过关键字定位特定事件 然后将该事件中的键值替换为 这必须使用 sed 来完成 Splunk 转发问题 我不会用细节来烦你 事件示例 message we have a response fro
  • 电子邮件正则表达式将如何处理新的 unicode 域?

    Since 2009年10月 互联网 名称指定公司和 Numbers ICANN 批准了创建 国家 地区代码顶级域名 ccTLD 在互联网上使用 母语 IDNA 标准 脚本 我很确定大多数网站当前使用的标准正则表达式不会将它们标记为有效 还
  • 正则表达式获取两个方括号之间的数字

    您好 我需要使用正则表达式在 JavaScript 中获取两对方括号内的字符串 这是我的字符串 12 23 asd 到目前为止我尝试的是使用这种模式 d 我需要获得价值12使用正则表达式 您可以使用以下正则表达式 d 这将提取12 from
  • 在 C++ 中使用 regex_iterator 的确切方法是什么?

    我一直在寻找一种好方法来计算字符串中特定类型的子字符串的数量 比如说 我想计算字符串 smstyuismsms 中 sms 的出现次数 我在论坛中找到了答案 有人建议使用 regex iterator 但是 当我尝试如下时 string i
  • \d 只匹配0-9位数字?

    据我所知 d应该匹配非英文数字 例如 但它在 JavaScript 中不能正常工作 看这个jsFiddle http jsfiddle net xZpam http jsfiddle net xZpam 这是正常行为吗 JavaScript
  • 在Python中用空格分割字符串——保留带引号的子字符串

    我有一个像这样的字符串 this is a test 我正在尝试用 Python 编写一些内容 以将其按空格分开 同时忽略引号内的空格 我正在寻找的结果是 this is a test 附言 我知道您会问 如果引号内有引号会发生什么 嗯 在
  • 正则表达式匹配组,但组成员除外

    因此 有许多正则表达式可以匹配特定的组 如下所示 Any character except a newline m Any character the m modifier enables multiline mode w A word c
  • 使用 getElementById 在 javascript 中使用正则表达式进行 Html 表单验证?

    我想使用正则表达式验证 html 表单的示例模式 AAA 111 2222 aa 1234 目前 我的代码要么为所有输入返回 正确 要么为所有输入返回 不正确 并且我无法弄清楚我的问题出在哪里 var x document getEleme
  • 匹配 6 个字母数字字符串的正则表达式是什么?

    我需要 ASP NET 应用程序的正则表达式来匹配至少 6 个字符长的字母数字字符串 我对 ASP NET 不熟悉 但正则表达式应该是这样的 a zA Z0 9 6 and 分别表示字符串的开始和结束 a zA Z0 9 描述一个字母数字字
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • 跳过解析 CODE 标签内的 BBCode

    我正在使用以下方法解析 BBCoderegex以便将其替换为 HTML 我现在被困住了 因为 code 标签解析 基本上 当你这样做时 code b this is bb b u code in u i code i code 它不应该取代
  • 在 sed 中插入换行符 (Mac OS X)

    如何在 sed 的替换部分插入换行符 此代码不起作用 sed s 1234 n 1 g input txt gt output txt 其中 input txt 是 test1234foo123bar1234 和output txt应该是
  • 从单个正则表达式匹配文件名和文件扩展名

    我确信这一定很容易 但我很挣扎 var regexFileName match filename var regexFileExtension w match file extension function displayUpload va
  • 哪些字符可以用作正则表达式分隔符?

    哪些字符可以用作 Perl 正则表达式的分隔符 m re m re and m re 一切似乎都有效 但我想知道所有可能性 From perlop http perldoc perl org perlop html 通过 m 您可以使用任意
  • 使用正则表达式验证字符串是否安全

    我有一个网站 用户可以在其中选择用户名 目前 他们可以输入几乎任何字符 包括 ETC 我知道我可以使用正则表达式 这可能就是我的选择 我将使用否定集 我认为这是正确的工具 如下所示 那么 我怎样才能知道要放入该集合中的所有非法字符呢 我可以
  • 音乐和弦部分拆分正则表达式

    这是此问题的后续问题 用于匹配音乐和弦的正则表达式 https stackoverflow com questions 11229080 regex for matching a music chord 是我问的 现在我有一个正则表达式来知

随机推荐