(使用 MacOSX 並可以將其轉換為 perl 腳本)。我對 Linux/Unix 命令相當陌生,而且我的 Google 搜尋沒有成功。
我正在創建一個腳本,以便快速搜尋某人的培訓記錄。我這樣做的方法是在一行中列出個人的訓練記錄(也許有更好的方法?)。當我使用 Grep 搜尋特定名稱、受訓位置或日期時,它會顯示整行。我想 grep 搜尋特定字串並僅顯示行的開頭,即:前 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 字串是一個環視,因此它不會包含在匹配中。