文件名: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
非常感谢
答案 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的模式,我将不胜感激: