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

Bash grep表示不包括点符号的变量,bash,grep,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一个变量,不包括那些以点符号开头的变量。但是,为整个单词选择-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
在这里,制作一个图案并将其与uniq过滤线匹配。 与这些线匹配的所需图案为*1565。我只是将该模式存储在一个变量中

测试一下

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

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

因为我喜欢perl正则表达式,所以我想使用过于复杂的正则表达式:

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

grep-P”((?这不起作用,它仍然包括以点开头的模式。现在尝试一下。您需要以大写字母开头并以var值结尾的行。是吗?@katarina您可以发布您的最坏情况吗?awk呢?如果您知道列号,您可以很容易地匹配,但awk已经足够了。现在检查一下。您可能会ant希望阅读手册页中关于-w的作用以及它的作用和不匹配之处。您还可以查看word Boundaries,它也用于空格?我的变量后面没有空格,只有变量前面和后面有制表符。根据需要进行修改,但解决方案是合理的。(^ |\s)$var为我提供了文件中所有行的输出,我是否对其进行了错误修改?@katarina此解决方案仅打印
$var
内容用空格(空格,制表符)括起的行或者它们在行首或行尾。因此,这是一个很好的解决方案,并在开始修改之前对其进行测试。从您的示例中,它选择了所需的输出。我在没有修改的情况下对其进行了测试,它给了我空输出。我的文件肯定在模式前包含空格,在模式后包含制表符,因此我不知道该模式在哪里问题可能是。但谢谢你向我解释它的含义,很高兴知道它的未来。
grep -P "((?<=^)|(?<=\s))$var(?=(\s|$))"