现在,我正在尝试删除在行尾有80000或更高号的文件的所有行。
例如
詹妮弗·考恩:548-834-2348:583 Laurel Ave,TX,金斯维尔,83745:10/1/35:58900
:408-253-3122:123 Park St. .,加利福尼亚州圣何塞,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。
发布于 2022-11-23 03:48:48
这是一个很尴尬的问题,但你可以调整你现有的答案来得到:
sed '/:[8-9][0-9]\{3,\}$/d; /:[0-9]\{6,\}$/d' file
我不知道您还能用sed做什么(它非常脆弱);这样可以解决您的问题吗?
发布于 2022-11-23 03:14:48
正则表达式不理解数值,如果这样做,将是一个噩梦。
您正在处理字段中的数据,所以这对于awk来说是一个很好的任务。
您希望awk遍历所有的行,然后打印出第五字段小于80000的行。
awk -F":" '$5 < 80000' datebook.txt
-F":"
说冒号是字段分隔符。$5
的意思是第五个字段。
https://stackoverflow.com/questions/74541230
复制相似问题