Shell-Script

條件抓取

  • May 13, 2019

我有一個配置文件,其內容如下所示:

   Jobname|Type|Silo|Description
   #comment1
   #comment2
   job1|me|silo1|test_job1
   job1|me|silo1|test_job2
   job1|prod|silo1|test_job3

現在我需要文件的條件內容,比如 TYPE =me 的內容。為此,我正在使用 grep:

     job_detail=$((cat config_file | grep me | awk '{print $4}'))

在這種情況下,我也得到了第一行,因為 JOBNAME 得到了匹配的字元。我用 -v 選項轉義了評論。我無法評論配置文件的第一行,因為它被其他未知程序使用。

有沒有辦法我可以 grep 整個單詞匹配?如果有辦法用特定字元作為條件來 grep 整個單詞會更好。

一種用“|”分隔線的方法 然後grep?

嘗試

awk -F\| -v select="$var" '$2 == select { print $4;}' config_file

在哪裡

  • $var包含您要選擇的欄位
  • -F| 告訴 awk 使用 | 作為分隔符,| (pipr) 必須被轉義。
  • -v 選擇=“ $ var" transfer $ var 到 awk 變數(選擇)
  • $2 == select選擇第二個參數為“$var”的行或選擇。
  • { print $4;}列印第四個欄位。

man grep將向您展示-w標誌:

-w, --word-regexp Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore. 

或者,| egrep -v Jobname儘早堅持您的管道。

引用自:https://unix.stackexchange.com/questions/247279