regex sed正则表达式部分

11dmarpk  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(188)

现在,我正在尝试删除文件中行尾编号为80000或更大的所有行
比如说
詹妮弗·科万:548-834-2348:583德克萨斯州金斯维尔月桂大街83745:10/1/35:58900
乔恩·德洛奇:408-253-3122:123公园街,圣何塞,加利福尼亚州04086:7/25/53:85100
当我运行sed时,该命令应该只删除Jon DeLoach这一行
我试过了

sed '/:0*[1-9][0-9]{5,}|:0*[8-9][0-9]{4,}/d' datebook.txt

因为

egrep ':0*[1-9][0-9]{5,}|:0*[8-9][0-9]{4,}' datebook.txt

返回值等于或大于800000的所有行
但是,sed命令实际上不起作用,并发现这是因为我创建正则表达式

':0*[1-9][0-9]{5,}|:0*[8-9][0-9]{4,}'

仅适用于egrep,不适用于grep
我是正则表达式新手,对如何从egrep更改为grep有点困惑

xv8emn3q

xv8emn3q1#

这是一个尴尬的问题,但你可以调整你现有的答案得到:

sed '/:[8-9][0-9]\{3,\}$/d; /:[0-9]\{6,\}$/d' file

我不确定还能用sed做什么(它非常脆弱);这能解决你的问题吗?

bvjveswy

bvjveswy2#

正则表达式不理解数值,如果你这样做,维护起来将是一场噩梦。
您处理的是字段中的数据,因此这对awk来说是一个很好的任务。
您希望awk遍历所有行,然后打印出第五个字段小于80000的行。

awk -F":" '$5 < 80000' datebook.txt

-F":"表示冒号是字段分隔符。$5表示第五个字段。

相关问题