Grep 過濾並僅顯示行的開頭

Grep 過濾並僅顯示行的開頭

(使用 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 字串是一個環視,因此它不會包含在匹配中。

相關內容