我有一个包含多行的文件,如下所示:
品牌、型号、英寸、价格
dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
我想删除价格超过10000的行,请问用grep可以吗?
答案1
您可以使用以下命令获取价格大于 10000 的行:
$ grep -E '.* [0]*[1-9][0-9]{4,}$' file.txt
macbook pro 13 13000
asus zenbook 13 10500
如果你想删除这些行添加-v
:
$ grep -vE '.* [0]*[1-9][0-9]{4,}$' file.txt
dell xps 13 9000
.*
将匹配包含价格的最后一列之前的所有字符[1-9]
将匹配价格的第一位数字[0-9]{4,}$
将匹配第一个数字后的 4 个或更多数字,因此总共有 5 个数字,表示 10000 或更多
答案2
这是可能的,但grep
使用对字符串而不是数字进行操作的正则表达式。
grep -v '[0-9]\{5\}$' input.txt
-v
删除匹配的行。[0-9]
匹配任意数字,\{n\}
表示前面的内容重复n次(本例中为5次,即10000次及以上)。$
匹配行尾。
awk
可以比较数字,所以它更适合这项工作:
awk '$4<10000{print}' input.txt
或 Perl:
perl -ane 'print if $F[-1] < 10000' input.txt
答案3
鉴于您的示例输入:
$ cat /tmp/foo
dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
您可以使用 awk:
$ awk '{ if ($4 <= 10000) print; }' /tmp/foo
dell xps 13 9000
答案4
尝试
cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt
在哪里
- 条件 NR==1 保留标题行。