我有一個包含日誌文件的目錄。從unix中的日誌文件中提取令牌
我們感興趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我們必須提取此目錄中的日誌文件中的所有類似的路線,並打印出令牌「ABCDEG」特定的日誌行。
複製是可以接受的。
我們如何通過一個unix命令操作來實現這一點?
我有一個包含日誌文件的目錄。從unix中的日誌文件中提取令牌
我們感興趣的是出外'xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
我們必須提取此目錄中的日誌文件中的所有類似的路線,並打印出令牌「ABCDEG」特定的日誌行。
複製是可以接受的。
我們如何通過一個unix命令操作來實現這一點?
sed -r '/platform=.*orderId=/s/.*orderId=([^|]+).*/\1/g' *
從包含platform=
& & orderId=
(/platform=.*orderId=/
)的所有行,取字符(([^|]+)
)的non-|
序列orderId=
之後。
awk -F'|' '$2=="platform=SUN"{sub(/orderId=/,"", $4); print $4}' logFile*
輸出
ABCDEG
IHTH
grep -rP "\|platform=SUN\|.*(?<=\|orderId=)" | sed s/.*platform=SUN.*orderId=// | sed s/\|.*//
$ str='xxxxxxxxx|platform=SUN|.......|orderId=ABCDEG|........'
$ grep -Po 'platform=SUN.*orderId=\K[^|]*' <<< "$str"
ABCDEG
這需要Perl兼容的正則表達式(-P
); -o
只保留這場比賽。 \K
是可變長度外觀:「匹配左邊的東西,但不包含匹配的字符串」。
從日誌的目錄,你可以運行下面的命令:
sed -n /platform=SUN/p * | sed 's#.*orderId=\(.*\)|.*$#\1#'
氏前提是這些比賽都是在固定列。 – tripleee
答案基於提供的證據並有退款保證;-) – shellter