grep完全匹配

时间:2013-01-16 09:44:48

标签: bash unix

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会产生一个空白值。有什么想法可以解决这个问题吗?

2 个答案:

答案 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

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