使用 grep 从文件中删除多行

使用 grep 从文件中删除多行

我有一个包含多行的文件,如下所示:

品牌、型号、英寸、价格

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 保留标题行。

相关内容