【问题标题】:How to use a regular expression to remove lines without a word?如何使用正则表达式删除没有单词的行?
【发布时间】:2011-08-11 10:21:50
【问题描述】:

我正在使用 textmate 来编辑文件。我想删除所有不包含单词的行。这是一个例子。

apple ipad
hp touch pad
samsung galaxy tab
motorola xoom

如何删除所有不包含单词“pad”的行,并使用正则表达式得到这个结果??

apple ipad
hp touch pad

谢谢大家。

【问题讨论】:

  • 您要删除还是保留所有带有“pad”字样的行? “pad”必须在行尾还是在任何地方?
  • "pad" 在任何地方。我想保留带有“pad”的行,并删除所有其他行。 Kizu的回答解决了我的问题。感谢您的帮助 RoToRa。 :)
  • 哇。感谢那。它只是帮助了一堆。

标签: regex textmate oniguruma


【解决方案1】:

用空字符串替换^(?!.*pad.*).+$

【讨论】:

  • 您能解释一下这个正则表达式吗? @kizu
  • @natansun (?!) 是一个“负前瞻”,它本身是零宽度的,但只有当它找不到其中的内容时才匹配。所以我们在一行中寻找任何东西——.+,然后寻找它是否不包含前缀为任何其他符号的pad——(?!.*pad.*),如果找到这个表达式,我们可以替换它带有一个空字符串,基本上会删除该行。
  • 我稍微调整了一下,并使用^(?!.*(10039|10038|10037|10036).*).+$\n 替换了没有我想要的任何单词的行,并删除了过程中的换行符。
【解决方案2】:

我不确定使用正则表达式来做这种事情,但你可以很容易地使用 grep 来做到这一点。

例如,如果文件 textfile 包含以下内容:

apple ipad
hp touch pad
samsung galaxy tab
motorola xoom

打开终端,运行以下命令:

grep pad textfile

它会输出这个:

apple ipad
hp touch pad

如果要将输出保存到文件中,可以执行以下操作:

grep pad textfile > filteredfile

【讨论】:

  • 感谢 daxnitro。这是一个很好的解决方案。但是 kizu 的回答更好,因为我可以在 textmate 中得到结果。但是非常感谢您的帮助。 :)
【解决方案3】:

此表达式将选择包含 word pad 的行: ^.*pad.*$

^ 字符表示行首,$ 字符表示行尾,.* 允许单词周围有任意数量的字符。

在当前状态下,这对于您的目的而言可能过于广泛 - 需要更具体的信息。

【讨论】:

  • 是的。这可以得到所有带有“pad”的行。但我想删除没有这个词的行。我以前不知道该怎么做。感谢您的回答。 :)
  • 感谢您提供对表达式中字符的解释。
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多