1
read -p "Please enter ID: " staffID 
id=$(grep -w "$staffID" record | cut -d ":" -f1 | sort -u );
echo $id

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

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

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。有什么想法可以解决这个问题吗?

4

2 回答 2

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 之前检查用户输入,如果他们输入了有效的 id([0-9]+)可能?因为用户可以输入.*

于 2013-01-16T09:56:52.417 回答
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

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

于 2015-03-05T12:54:18.947 回答