sed - 找到匹配并删除它们,只留下不匹配的
问题描述
我有以下文件。我想使用 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 -E '/[0-9]{6}-[0-9]{4}/d' file > newfile
请参阅此sed
演示。
细节
-E
- POSIX ERE 标志,无需转义{
和}
量词[0-9]{6}-[0-9]{4}
- 正则表达式匹配 6 位数字,-
然后是 4 位数字d
- 删除匹配正则表达式模式的行。