现在,我正在尝试删除文件中行尾编号为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有点困惑
2条答案
按热度按时间xv8emn3q1#
这是一个尴尬的问题,但你可以调整你现有的答案得到:
我不确定还能用sed做什么(它非常脆弱);这能解决你的问题吗?
bvjveswy2#
正则表达式不理解数值,如果你这样做,维护起来将是一场噩梦。
您处理的是字段中的数据,因此这对awk来说是一个很好的任务。
您希望awk遍历所有行,然后打印出第五个字段小于80000的行。
-F":"
表示冒号是字段分隔符。$5
表示第五个字段。