gpt4 book ai didi

linux - 如何使用 sed 从文件中 grep 特定值

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:05 26 4
gpt4 key购买 nike

我是使用 sed 命令的新手,我的问题可能是一个基本问题。

我有一个日志文件,我试图仅 grep 错误并从错误行中提取一些所需的值。

当 sed 中有超过 9 个模式组时,我遇到一个问题。我尝试使用 sed -e 来拥有多个 sed,但它似乎不起作用。

已尝试的命令

命令#1:

grep 错误文件 | sed -n 's_.*key1=\([0-9]*\), key2=\([0-9]*\),.* key3=(.*\), key4=\([a-zA-Z0-9_]*\),.* key5=\([A-Z0-9]*\),.*key6=\([a-zA-Z0-9]*\),.*key7=\([0- 9]*\), key8=\(.*\), key9=\(.*\), key10=\(.*\)}.*_\1,\2,\3,\4,\5,\6,\7,\8,\9,\10_p'

在上面的输出中,正在打印数字 10,而不是与第 10 个模式匹配的值

命令#2:

这个 AWK 命令几乎完成了我想要的操作,尽管我无法将其格式化为正确的逗号分隔值。

awk -F "\n" '/ERROR/ && match($0,/key1=([0-9]*), key2=([0-9]*),.*key3=(.*),key4=([a-zA-Z0-9_]*),.*key5=([a-z]*).*key6=([a-z]*),.*key7=([A-Z0-9]*),.*key8=([0-9]*).*key9=([a-zA-Z0-9]*)/,a) {
for (i=1; i in a; i++) {
printf "%s%s", a[i], (i<length(a) ? OFS : ORS)
}
printf "\n"
}' TestFile

最佳答案

只需使用 awk 即可。您应该已经在考虑 awk,因为您正在使用 grep+sed。使用 GNU awk 将第三个参数设置为 match():

awk -v OFS=',' '/ERROR/ && match($0,/key1=([0-9]*), key2=([0-9]*),.* key3=(.*), key4=([a-zA-Z0-9_]*),.* key5=([A-Z0-9]*),.*key6=([a-zA-Z0-9]*),.*key7=([0-9]*), key8=(.*), key9=(.*), key10=(.*)}/,a) {
for (i=1; i in a; i++) {
printf "%s%s", a[i], (i<length(a) ? OFS : ORS)
}
}' file

但如果您发布了简洁、可测试的示例输入和预期输出,可能有一个更简单的解决方案,我们可以为您提供帮助。

关于linux - 如何使用 sed 从文件中 grep 特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43275257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com