grep表示不包括点符号的变量

时间:2017-04-01 16:09:37

标签: bash grep

我想grep一个变量,不包括那些以点符号开头的变量。但是,为整个单词选择-w选项不包括点符号,因此它不会仅选择4 55 48,而是选择0.4 0.55 5.48。

e.g。是$ var = 1565

输入

A 3.00027 1565    
B 3.00026 1565    
C -1.1565 5000 

期望的输出

A 3.00027 1565    
B 3.00026 1565

我已经看到了grep的解决方案,其中包含以grep开头的精确模式,但这不适用于变量。

我尝试在变量之前添加空格符号,如下面的行所示,但它也没有提供所需的输出。

grep -E -w " $var" input.txt > output.txt #results in empty output
grep -E -w "[:space:]|$var" input.txt > output.txt # gives solutions that include the dot sign

3 个答案:

答案 0 :(得分:2)

你可以尝试:

grep -E "(^|\s)$var(\s|$)"

答案 1 :(得分:1)

因为我喜欢perl-regex,我会使用过于复杂的正则表达式:

grep -P "((?<=^)|(?<=\s))$var(?=(\s|$))"

正则表达式甚至可以与-o一起使用,只返回没有任何空格或类似的数字。 (使用非捕获组)

答案 2 :(得分:0)

var=1565
cat input.txt|uniq|grep -E ^[A-Z]+.*$var >output.txt

在这里,您可以创建一个模式并将其与 uniq 过滤后的行匹配。 与这些行匹配的所需模式是 * 1565 。我只是将该模式存储在一个变量中。

测试一下

awk -F " " "{if(\$3==$var){print(\$0);}}" input.txt