Linux 如何从文件的grep中分割行?

Linux 如何从文件的grep中分割行?,linux,bash,Linux,Bash,给定Employee.txt PD:198801221:Jason:Jason@gmail.com PU:19941029:Tan:tan@gmail.com PS:19960601:May:may@gmail.com 还有一个表格 echo -n "Enter BirthDate:";read bdate grep "$bdate" Employee.txt echo "Employee name (auto display):"

给定Employee.txt

PD:198801221:Jason:Jason@gmail.com
PU:19941029:Tan:tan@gmail.com
PS:19960601:May:may@gmail.com
还有一个表格

echo -n "Enter BirthDate:";read bdate
grep "$bdate" Employee.txt
echo "Employee name (auto display):"
echo "Employee email (auto display):"
它获取员工的出生日期,并根据输入文件显示姓名和电子邮件

例如,如果我将出生日期输入为
19941029
,则从文件中得到的结果是
PU:19941029:Tan:tan@gmail.com

上面的脚本显示了整行


如何将该行分隔为自动显示名称和电子邮件字段?

您可以通过管道将grep输出分离出来,然后选择所需的字段

#!/usr/bin/env bash
set -eu

echo -n "Enter BirthDate: "
read -r bdate

found=$(grep "$bdate" Employee.txt)
name=$(echo "$found" | cut -d: -f 3)
email=$(echo "$found" | cut -d: -f 4)

echo "Employee name (auto display): $name"
echo "Employee email (auto display): $email"

这是相当简单的,如果字段包含分隔符(本例中为冒号),则会中断。在这种情况下,您应该获得一个CSV阅读器。

您可以使用IFS将输入读取到4个变量中

echo -n "Enter BirthDate:";read bdate

match=$(grep "$bdate" Employee.txt)
IFS=':' read -r first second third fourth <<<$match


echo "Employee name (auto display):" $third
echo "Employee email (auto display):" $fourth
echo-n“输入生日:”;读bdate
匹配=$(grep“$bdate”Employee.txt)

如果=':'阅读-r第一秒第三秒第四这是一个现实世界问题的简化版本,还是一个课程学习练习,还是??基本上,你用错了工具。祝你好运