grep-模式为变量

时间:2018-09-10 19:58:44

标签: regex

文件名:Data.txt

在此文件内:

...
3754  Skype Helper    
375  Skype Helper    
37  Skype
... 

文件名:shell.sh

#!/bin/bash

IFS='
'
var="Skype"

grep "\d\+\s\+${var}$" /Users/run/Documents/Data.txt >> /Users/run/Documents/output.txt 

输出应为:

37  Skype

但是

我得到:

3754  Skype Helper    
375  Skype Helper    
37  Skype 

非常感谢

2 个答案:

答案 0 :(得分:1)

您使用的BRE POSIX模式不支持PCRE(类似Perl)\d\s,您可以将\d替换为[0-9]括号表达式和{ {1}}和\s POSIX字符类:

[[:space:]]

请注意,您可以对最后一个grep "[0-9]\+[[:space:]]\+${var}\$" 进行转义以使其成为显式的文字美元符号,但由于将结尾的美元正确地解析为字符串符号的末尾,因此没有必要,这也将起作用:< / p>

$

如果您不想越狱,则可以使模式POSIX ERE兼容:

grep "[0-9]\+[[:space:]]\+${var}$"

如果您告诉grep -E "[0-9]+[[:space:]]+${var}$" ^^ 使用PCRE正则表达式引擎来解析模式,您实际上可能会继续使用\d\s

grep

请参见online demo

答案 1 :(得分:0)

我在Mac(MacOS High Sierra)上工作,并且我不能获得我想要的输出。如果有人在我的第一个帖子中尝试使用前两个文件,但使用@WiktorStribiżew的模式,我将不胜感激: