使用sed删除与正则表达式匹配的记录

时间:2016-04-14 02:30:43

标签: linux bash sed grep

对于我的生活,我无法让我的Linux任务部分工作。这是要求:

到目前为止,我们已经:

grep -iv chevy cars
     

现在让我们删除10,000美元或更多的汽车。管道输出   通过删除与常规匹配的记录,将grep转换为sed来执行此操作   表达式在记录末尾表示5个(或更多)数字(请勿   为此使用重复因子,例如{5}

我觉得应该是:

grep -iv 'chevy' cars | sed '/[0-9][0-9][0-9][0-9][0-9]*/ d'

我已经在这里试过很多解决方案......但没有任何效果。

输入数据:

plym    fury    77      73      2500  
chevy   nova    79      60      3000  
ford    mustang 65      45      17000  
volvo   gl      78      102     9850  
ford    ltd     83      15      10500  
Chevy   nova    80      50      3500  
fiat    600     65      115     450  
honda   accord  81      30      6000  
ford    thundbd 84      10      17000  
toyota  tercel  82      180     750  
chevy   impala  65      85      1550  
ford    bronco  83      25      9525 

5 个答案:

答案 0 :(得分:1)

忽略教授的程序所期望的内容,这些要求(不能以“chevy”或“Chevy”开头,不能以5位或更多位数结尾)也适合单个sed命令:

$ sed '/^[Cc]hevy/d;/[[:digit:]]\{5,\}$/d' cars
plym    fury    77      73      2500
volvo   gl      78      102     9850
fiat    600     65      115     450
honda   accord  81      30      6000
toyota  tercel  82      180     750
ford    bronco  83      25      9525

或单个grep命令:

$ grep -vi '^chevy\|[[:digit:]]\{5,\}$' cars
plym    fury    77      73      2500
volvo   gl      78      102     9850
fiat    600     65      115     450
honda   accord  81      30      6000
toyota  tercel  82      180     750
ford    bronco  83      25      9525

实际输入在行尾包含空格,因此上面的命令实际上不起作用。如果这些空白是真实的而不仅仅是复制粘贴的结果,则必须考虑如下:

sed '/^[Cc]hevy/d;/[[:digit:]]\{5,\}[[:blank:]]*$/d' cars

grep -vi '^chevy\|[[:digit:]]\{5,\}[[:blank:]]*$' cars

答案 1 :(得分:0)

你错过了很多[0-9]:

grep -vi chevy cars| sed '/[0-9][0-9][0-9][0-9][0-9][0-9]*$/d'
plym fury 77 73 2500
volvo gl 78 102 9850
fiat 600 65 115 450
honda accord 81 30 6000
toyota tercel 82 180 750
ford bronco 83 25 9525

做你想要的。任何五位或五位以上的数字都被省略了。

答案 2 :(得分:0)

试试这个:

[root@kintuparantu tmp]# awk '$5<10000' aaaaaaa.csv
plym    fury    77      73      2500  
chevy   nova    79      60      3000  
volvo   gl      78      102     9850  
Chevy   nova    80      50      3500  
fiat    600     65      115     450  
honda   accord  81      30      6000  
toyota  tercel  82      180     750  
chevy   impala  65      85      1550  
ford    bronco  83      25      9525

答案 3 :(得分:0)

<强>汽车:

plym    fury    77      73      2500  
chevy   nova    79      60      3000  
ford    mustang 65      45      17000  
volvo   gl      78      102     9850  
ford    ltd     83      15      10500  
Chevy   nova    80      50      3500  
fiat    600     65      115     450  
honda   accord  81      30      6000  
ford    thundbd 84      10      17000  
toyota  tercel  82      180     750  
chevy   impala  65      85      1550  
ford    bronco  83      25      9525

试试这个:

$ grep -iv 'chevy' cars | sed -r '/[0-9][0-9][0-9][0-9][0-9]+/d'

<强>输出:

plym    fury    77      73      2500  
volvo   gl      78      102     9850  
fiat    600     65      115     450  
honda   accord  81      30      6000  
toyota  tercel  82      180     750  
ford    bronco  83      25      9525

答案 4 :(得分:0)

awk '$5 < 10000 && !/[Cc]hevy/' file 
    plym    fury    77      73      2500  
    volvo   gl      78      102     9850  
    fiat    600     65      115     450  
    honda   accord  81      30      6000  
    toyota  tercel  82      180     750  
    ford    bronco  83      25      9525