read -p "Please enter ID: " staffID
id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u );
echo $id
我在尝试从文件中获取正确的值时遇到了一些问题。
以下内容存储在记录文件中。
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
我的第一列存储了id,它始终是唯一的,是我在grep中寻找的。使用上面的代码,我只想找到用户输入的唯一ID并显示在屏幕上但是如果我输入ID 13时显然会产生13,那么我的echo会产生一个空白值。有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
#!/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之前,检查用户输入,如果他们输入了有效的身份([0-9]+)
可能?因为用户可以输入.*
答案 1 :(得分:0)
似乎在grep中添加^可以解决您的问题。
read -p "Please enter ID: " staffID
[[ "$staffID" =~ ^[0-9]+$ ]] || { echo "Enter only Numbers. Aborting" ; exit 2 ; }
id=$(grep -w "^$staffID" record | cut -d ":" -f1 | sort -u );
if [ "$id" == "" ]; then
echo "ID : Not found"
else
echo $id
fi
我添加了一行来检查您的输入是否为有效数字。