(使用 MacOSX 并可以将其转换为 perl 脚本)。我对 Linux/Unix 命令相当陌生,并且我的 Google 搜索没有成功。
我正在创建一个脚本,以便快速搜索某人的培训记录。我这样做的方法是在一行中列出个人的培训记录(也许有更好的方法?)。当我使用 Grep 搜索特定名称、受训位置或日期时,它会显示整行。我想 grep 搜索特定字符串并仅显示行的开头,IE:前 2 个单词(名字/姓氏。)。
Training.txt 文件看起来与此类似:
Ivie, Shawn 收银员 5/24/2016 储藏室 12/2/2016 服务台 11/31/2016
艾伦,亚当 收银员 5/10/2016 储藏室 12/13/2016
Martinez, Jessica 收银员 5/20/2017 储藏室 10/29/2016 主管 1/23/2016
我现在使用的命令是:
grep "Cashier" Training.txt
它返回所有 3 条记录,即所有记录的整行内容。
我试过了:
grep -E -o ".{0,0}Cashier.{0,5}" Training.txt
它返回(在本例中为所有 3 条记录),但在“Cashier”之前显示 0 个字符,在“Cashier”之后显示 5 个字符。
Cashier 5/10
我怎样才能合并一个 grep (或者可能是一个 Perl 命令)来搜索“Supervisor”并且只显示前 2 个单词(名称)?其次:有什么想法可以使这种过程变得更容易吗? (电子表格在这种情况下没有用)。
答案1
这非常适合awk
:
awk '/Supervisor/ { print $1, $2 }' /path/to/inputfile
您甚至可以将搜索限制在第三个字段,这样您就不会误报名为“Supervisor Bob”的人:
awk '$3 ~ /Supervisor/ { print $1, $2 }' /path/to/inputfile
答案2
您可以grep
在以下Perl
模式下使用:
grep -oP '^(\S+,?\s+){2}(?=Cashier\s)'
结果
Ivie, Shawn
Allen, Adam
Martinez, Jessica
在职的
- 在 Perl 模式下,grep 从行首查找两个字段 (\S+)。
- 站在第二个字段的空白末尾,如果我们能够看到收银员后面跟着一个空白,那么我们就找到了匹配项。由于 Cashier 字符串是一个环视,因此它不会包含在匹配中。