首页 > 解决方案 > 找到匹配并删除它们,只留下不匹配的

问题描述

我有以下文件。我想使用 sed 和正则表达式来解决它。

Alex Trump, New York, 123445-4567
Jimmy Carter, Los Santos, 123245-3x20
Alec Baldwin, babylon 5,
Luke Skywater, cloud city, 223345-1420

因此,当我运行它时,它会删除所有匹配的行并留下 Jimmy 和 Alec 或将未找到的内容写入新文件。

如果我使用正则表达式,我知道下面的代码将寻找匹配的数字

\d\d\d\d\d\d[-]\d\d\d\d$

我想要这样的东西。猫文件 | sed -r \d\d​​\d\d\d\d[-]\d\d\d\d$ 所以当我运行它时,它会删除所有匹配的行并留下 Jimmy 和 Alec 或写下未找到的内容新文件。

标签: sed

解决方案


您可以使用

sed -E '/[0-9]{6}-[0-9]{4}/d' file > newfile

请参阅sed演示

细节

  • -E- POSIX ERE 标志,无需转义{}量词
  • [0-9]{6}-[0-9]{4}- 正则表达式匹配 6 位数字,-然后是 4 位数字
  • d- 删除匹配正则表达式模式的行。

推荐阅读