无法获取此简单的 sed 命令



这个sed命令描述如下

删除 10,000 美元或以上的汽车。通过管道将sort的输出通过管道到sed中来执行此操作,方法是在记录末尾匹配表示 5(或更多)数字的正则表达式后立即退出(不要为此使用重复):

到目前为止,命令是:

$ grep -iv chevy cars | sort -nk 5

我必须在该命令的末尾添加另一个管道,我认为它"一旦我们在记录末尾匹配代表 5 位或更多数字的正则表达式,就会退出"

我尝试过这样的事情

$ grep -iv chevy cars | sort -nk 5 | sed "/[0-9][0-9][0-9][0-9][0-9]/ q" 

//内的其他变体,但没有任何效果!匹配表示 5 个或更多数字的正则表达式并根据此问题退出的命令是什么?

名义上,您应该在第二个/之前添加一个$,以匹配记录末尾的 5 位数字。 如果您省略$,那么任何 5 位数字的序列都会导致sed退出,因此,如果在价格之前有另一个数字(也许是 VIN),它可能会在您不打算匹配时匹配。

grep -iv chevy cars | sort -nk 5 | sed '/[0-9][0-9][0-9][0-9][0-9]$/q'

总的来说,在正则表达式周围使用单引号更安全,除非你需要在其中替换一个 shell 变量(或者除非正则表达式本身包含单引号)。 您还可以指定重复:

grep -iv chevy cars | sort -nk 5 | sed '/[0-9]{5,}$/q'

{5,}部分匹配 5 位或更多数字。 如果由于任何原因不起作用,您可能会发现您正在使用 GNU sed并且您需要做一些类似 sed --posix 的事情才能让它在正常模式下工作。 或者,您可以只删除反斜杠。 GNU当然有选择sed改变它使用的正则表达式机制(就像GNU grep一样)。

另一种方式。

由于您不发布文件示例,因此将其作为猜测。在这里,我正在寻找带有单词"chevy"的行,其中字段 5 小于 10000。

awk '/chevy/{if ( $5 <10000 ) 打印 $0} ' 汽车

我忘记了来自 grep 的标志 -i ...所以正确的是:

awk 'BEGIN{IGNORECASE=1}/chevy/{if ( $5 <10000 ) print $0} ' cars

$ 猫>汽车

雪佛兰 2 3 4 10000

雪佛兰 2 3 4 5000

chEvy 2 3 4 1000

雪佛兰 2 3 4 10000

雪佛兰 2 3 4 2000

Prevy 2 3 4 1000

Prevy 2 3 4 10000

$ awk 'BEGIN{IGNORECASE=1}/chevy/{if ( $5 <10000 ) print $0} ' cars

雪佛兰 2 3 4 5000

chEvy 2 3 4 1000

雪佛兰 2 3 4 2000

grep -iv chevy cars | sort -nk 5 | sed '/[0-9][0-9][0-9][0-9][0-9]$/d'

相关内容

  • 没有找到相关文章

最新更新