我正在编写一个脚本,其中一个功能是在文本文件 DNI 或用户被要求输入的名称中进行搜索,并在找到它们时打印整行。
该文件的格式为“DNI | 名称”
2:Pepe
21:Julio
1:Marta
该功能buscarNombre
对我来说正常工作:
function buscarNombre()
{
echo Introduce Nombre a buscar:
read nombrex
nombrex=`grep "\$nombre\b" agenda.txt`
echo $nombrex
menu
}
但是 searchDNI 函数不是搜索和打印特定的 DNI,而是搜索我并打印包含我传递给他们的数字的任何 DNI。
function buscarDNI()
{
echo Introduce DNIx a buscar:
read DNIx
DNIx=`grep "\$DNIx\b" agenda.txt`
echo $DNIx
menu
}
例如,如果我告诉它查找 DNI:2,它将打印 2:Pepe 和 21:Julito 行,而我只希望它打印 2:Pepe。
如何改进buscarDNI
以使其仅搜索确切的 DNI?
使用
grep -w
,它搜索确切的单词我无法重现您的错误。也就是说,您可能应该创建一个更复杂的条件来检查数据。例如:
要查看 DNI,请确认它位于行首并跟随字符“:”:
要查看名称,请检查它是否在“:”之后,然后是行尾:
但是,使用 Awk,这一切都容易得多:您有一个文件,其中的字段由“:”分隔。因此,使用 Awk 找到第二列正好是“Pepe”的行就像说:
与第一列相同:
通过这种方式,您将准确地找到您正在寻找的内容,而无需使用正则表达式或扭曲 Grep 来很好地过滤它。
所以你的功能会是这样的: