首页 > 解决方案 > 如何从文件中删除与模式不匹配或在特定范围内不匹配的行

问题描述

我有一个 file.txt 看起来像这样:

{lat: 41.074294, lng:14.274297},
{lat: 41.074394, lng:14.274397},▒
{lat: 41.074494," lng:14.274497},
{lat: 41.07494, lng:14.274597},
lat: 41.074394, lng:14.274397},
{lat: 41.074494, lng:14.274497},
{lat: 41.074594, lng:14.274597},
{lat: 0.00000, lng:0.0000},
{lat: 46.074294, lng:14.274297},

如何删除所有不包含以下模式的行:

{lat: xx.xxxxxx, lng:xx.xxxxxx},

还是与其他行有很大不同,比如最后两行?可能 grep 或 sed 可以做到这一点,但我不确定如何在这种情况下使用它们。

所以输出应该是这样的:

{lat: 41.074294, lng:14.274297},
{lat: 41.074494, lng:14.274497},
{lat: 41.074594, lng:14.274597},

标签: bashunixsedgrep

解决方案


grep '^{lat: [0-9][0-9]\.[0-9]\{6\}, lng:[0-9][0-9]\.[0-9]\{6\}},$' file

说的好像不应该有太大的区别是太宽泛了,没法回答。具体到您的问题,可以这样做:

grep '^{lat: [4][0-2]\.[0-9]\{6\}, lng:[1][3-5]\.[0-9]\{6\}},$' file

推荐阅读