2012-11-26 37 views
0

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个或更多数字的正则表达式并退出的命令是什么?

+4

你能举一个'grep -iv chevy cars | sort -nk 5'? – renab

+1

名义上,您应该在第二个'/'之前添加'$'以匹配记录末尾的5位数字。 –

+0

输出中是否有逗号? –

回答

4

名义上,您应该在第二个/之前添加$以匹配记录末尾的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一样)。

1

另一种方式。

由于您没有发布文件样本,所以做了一个猜测。 在这里,我正在寻找与在该领域5小于10000

的awk“/雪佛兰/ {如果($ 5 < 10000)打印$ 0}”汽车

我忘字“雪佛兰”线从grep的国旗-i ...所以正确的是:

AWK 'BEGIN {IGNORECASE = 1} /雪佛兰/ {如果($ 5 < 10000)打印$ 0}' 汽车

$猫>汽车

雪佛兰2 3 4 10000

雪佛兰2 3 4 5000

雪佛兰2 3 4 1000

CHEVY 2 3 4 10000

CHEVY 2 3 4 2000

Prevy 2 3 4 1000

Prevy 2 3 4 10000

$ AWK“BEGIN {IGNORECASE = 1} /雪佛兰/ {如果($ 5 < 10000)打印$ 0 }“汽车

雪佛兰2 3 4 5000

雪佛兰2 3 4 1000

CHEVY 2 3 4 2000

+0

awk是答案,但它看起来像“grep -iv雪佛兰”说不chevy或雪佛兰,或CHEVY,...所以,而不是“grep -iv chevy cars | awk'$ 5 <10000'并且不需要”打印$ 0 “因为这是默认行动 –

+0

对不起,我没有注意到...要做到这一点使用BEGIN {IGNORECASE = 1} – Davison

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

请解释你的答案 –

相关问题