Bash grep精确整数匹配

Bash grep精确整数匹配,bash,unix,Bash,Unix,我在尝试从文件中grep正确的值时遇到一些问题 以下内容存储在记录文件中 read -p "Please enter ID: " staffID id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u ); echo $id 我的第一列存储的id总是唯一的,这是我在grep中寻找的。使用上面的代码,我只想找到用户输入的唯一ID,并显示在屏幕上,但如果我输入ID为13,我的echo会生成一个空白值,而它显然应该生成13。有什么办法可以

我在尝试从文件中grep正确的值时遇到一些问题

以下内容存储在记录文件中

read -p "Please enter ID: " staffID 
id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u );
echo $id
我的第一列存储的id总是唯一的,这是我在grep中寻找的。使用上面的代码,我只想找到用户输入的唯一ID,并显示在屏幕上,但如果我输入ID为13,我的echo会生成一个空白值,而它显然应该生成13。有什么办法可以解决这个问题吗

12:Griffin:Peter:13:14:16
14:Griffin:Meg:19:19:10
10:Griffin:Loi:19:20:20
130:Griffin:Stewie:19:19:19
13:Wayne:Bruce:19:20:2
参见代码中的注释

注意 我不知道确切的要求,但我建议在执行grep之前,检查用户输入,如果他们输入了有效的id
([0-9]+)
?因为用户可以输入
*

参见代码中的注释

注意
我不知道确切的要求,但我建议在执行grep之前,检查用户输入,如果他们输入了有效的id
([0-9]+)
?因为用户可以输入
*

似乎在grep中添加^

#!/bin/bash
read -p "Please enter ID: " staffID

#your code was commented out
#id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u );

id=$(grep -oP "^${staffID}(?=:)" record)
line=$(grep "^${staffID}:" record)

echo $id #use this line if you just want ID 
echo $line #use this line if you want the line with given ID

我添加了一行代码来检查您的输入是否有效。

似乎在grep中添加一个“^”应该可以解决您的问题

#!/bin/bash
read -p "Please enter ID: " staffID

#your code was commented out
#id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u );

id=$(grep -oP "^${staffID}(?=:)" record)
line=$(grep "^${staffID}:" record)

echo $id #use this line if you just want ID 
echo $line #use this line if you want the line with given ID

我添加了一行代码来检查您的输入是否为有效数字。

非常感谢,非常好用!选项-oP在grep中查找什么?@user1983064用于选项-o:仅显示匹配的部分-P使用perl正则表达式。我的代码的另一个特性现在也有类似的问题,是否有一种方法可以只通过确切的id删除一行?我尝试过使用sed,但没有效果:(@user1983064是的,您可以
sed-I/^${staffID}:/d”录制
试试看。非常感谢,效果非常好!选项-oP在grep中查找什么?@user1983064用于选项-o:仅显示匹配的部分。-P使用perl正则表达式。啊,好的。我的代码的另一个功能现在也有类似的问题,有没有办法仅通过确切的id删除一行?我尝试使用sed,但没有效果l:(@user1983064是的,你可以
sed-i/^${staffID}:/d“录制”
试试。