排除

排除

学习自学 Linux 教程时,我总是遇到这个问题

我的输出一直包含“clock 15”,请帮忙

#!/bin/sh
#comment single RegEx to match all of the items that you have enough rupees 
sed '1d' hw0207.txt | grep -v [2-9][0-9]
#comment grep will filter all numbers greater than 12, -v represents not
#comment first sed was to remove first line

正则表达式匹配方向

我正在尝试编写一个正则表达式来匹配所有您有足够卢比购买的商品。不要只匹配行,还应该匹配您能负担得起的行,这样如果价格发生变化,答案仍然是正确的。您只有 12 卢比,如果您想购买更多东西,您需要更富有一些。

Input file (hw0207.txt) Expected output of script
item cost
lamp oil 5
rope 10
clock 15
bombs 20

答案1

有很多方法可以做到这一点。我将展示两种:

排除

此方法使用上面的问题中所示的-v选项grep。我将把它分解为由 OR 条件分隔的两组数字。第一组数字包括 13 到 19。第二组数字是 20 到 99。如果满足这两个条件中的任何一个,它们将不会在输出中被选中。

sed '1d' hw0207.txt | grep -v '1[3-9]\|[2-9][0-9]'

选择

这种方法选择数字小于 12 的行。我们再次将其分成两组数字。第一组是 1 到 9 之间的个位数,第二组是 10 到 12 之间的两位数。

sed '1d' hw0207.txt | grep  ' [1-9]$\| 1[0-2]$'

注意前导空格和$末尾的。

交替:

sed '1d' hw0207.txt | grep -w '[1-9]\|1[0-2]'

希望这可以帮助

相关内容