我有一條線叫
10909101 - testingName - Log8767, File787 - 8:50PM
現在我只想使用 grep 來取得testingName
我的輸出。
第一個數字的位數可能會有所不同(另一行可能會將12
其本身作為第一個數字),因此我無法使用任何基於數字的 grep。那我該如何解決這個問題呢?
答案1
鑑於所有數據的格式都相同,grep
因此這是錯誤的工具。當然,它是可用的,但使用它是一件麻煩事——這不是grep
設計的目的,更好的工具是awk
。
由於您的分隔符號始終是“空格,破折號,空格”序列,即-
,您可以這樣做:
$ awk -F' - ' '{print $2}' <filename>
其中<filename>
是包含您正在搜尋的資料的檔案的名稱,您將獲得整個檔案中的所有行,這些行被修剪為僅第二個條目。如果您不喜歡使用三個字元分隔符,您可以這樣做:
$ awk -F- '{print $2}' | tr -d ' '
它只是抓取從第一個-
到第二個的所有內容,包括空格,並透過 刪除空格tr
。當然,如果您的檔案名稱中有空格,這會導致問題,您將需要堅持第一個範例。
答案2
這使用二的實例grep
,但它是純的grep
:
echo '10909101 - testingName - Log8767, File787 - 8:50PM ' | \
grep -o '\- [[:alpha:]]* \-' | grep -o '[[:alpha:]]*'
輸出:
testingName