Bash

從bash中的文本文件中提取文本

  • February 27, 2012

我有一個大文本文件,全是一行。文本中有幾個看起來像的部分,foo=12345我需要將它們全部提取為單獨的行,忽略文件的其餘部分。

例如:

random junk foo=12345 more junk random junk foo=2345 junk foo=7654 junk random foo=5432 junk

我想出去的是:

12345
2345
7654
5432

我知道如何編寫正則表達式來提取 . foo=([0-9]+),但我不確定如何將其應用於文本並在 bash 中取出行。

$> echo "random junk foo=12345 more junk random junk foo=2345 junk foo=7654 junk random foo=5432 junk" | grep --only-matching --perl-regexp "(?<=foo=)[0-9]+"
12345
2345
7654
5432

我們在這裡所做的是在"(?<=foo=)[0-9]+".

我會用來awk將長行解析為記錄。

awk 'BEGIN{FS="=";RS=" "}/^foo=/{print $2}'

這將每個“單詞”設置為單獨的記錄,並在該單詞中使用“=”分隔欄位。然後在左側為“foo”時輸出’=‘的右側。需要使用正則表達式代替,$1=="foo"因為如果沒有’=’,則第一個欄位與整個記錄相同。

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