2016-01-21 84 views
-1

我有一個包含日誌文件的目錄。從unix中的日誌文件中提取令牌

我們感興趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我們必須提取此目錄中的日誌文件中的所有類似的路線,並打印出令牌「ABCDEG」特定的日誌行。

複製是可以接受的。
我們如何通過一個unix命令操作來實現這一點?

回答

1
sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' * 

從包含platform= & & orderId=/platform=.*orderId=/)的所有行,取字符(([^|]+))的non-|序列orderId=之後。

0
awk -F'|' '$2=="platform=SUN"{sub(/orderId=/,"", $4); print $4}' logFile* 

輸出

ABCDEG

IHTH

+0

氏前提是這些比賽都是在固定列。 – tripleee

+0

答案基於提供的證據並有退款保證;-) – shellter

0
grep -rP "\|platform=SUN\|.*(?<=\|orderId=)" | sed s/.*platform=SUN.*orderId=// | sed s/\|.*// 
0
$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........' 
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str" 
ABCDEG 

這需要Perl兼容的正則表達式(-P); -o只保留這場比賽。 \K是可變長度外觀:「匹配左邊的東西,但不包含匹配的字符串」。

0

從日誌的目錄,你可以運行下面的命令:

sed -n /platform=SUN/p * | sed 's#.*orderId=\(.*\)|.*$#\1#'