在正则表达式匹配之间削减输出的最有效方法?

ksm18

我正在尝试解析

lspci -k 

每个设备的输出。换句话说,使用以下示例输出:

00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
    Subsystem: Gigabyte Technology Co., Ltd Device 5000
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
    Subsystem: Gigabyte Technology Co., Ltd Device d000
    Kernel driver in use: i915
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
    Subsystem: Gigabyte Technology Co., Ltd Device 5000
    Kernel driver in use: snd_hda_intel
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
    Subsystem: Gigabyte Technology Co., Ltd Device 5001
    Kernel driver in use: mei_me

我希望能够遍历每个文件和相关信息。我用来检测??:??。?格式的正则表达式。其他地方是:

grep -E '^[0-9]\w:[0-9]\w\.[0-9]' <<< "$s" | awk -F ' ' '{print $1}'

$ s是此格式列表中有多少设备。我之所以使用它,是因为我列出的非PCI设备格式不同。

在这种情况下,我想我可以获取每个匹配项的行号,因此将上述语句传递到

grep -n 

然后从一个区域到另一个区域使用sed cut,但是我觉得这不是解决此问题的有效方法。有什么建议?

我正在考虑的另一种解决方案是逐行读取并将空格转换为某些符号:例如

tr ' ' '%' 

如果以该行开头,则将其包括在内。但是,这可能会很棘手,因为我需要在循环外部添加一个外部变量。当然,我也可以在每个正则表达式实例之后添加\ n,然后设置:

IFS=$'\n'

既然已将其选中,

tr $'\t' 'x'

效果很好。但是,我觉得最有效的方法仍然是以某种方式剪切整个部分然后grep我需要的信息,而不是逐行处理随机变量。

汤姆·费内奇

以下代码将每个条目lspci -k分为几部分:

$ /sbin/lspci -k | awk -F'\t' 'NF == 1 { ++n; f = 0 } { a[n, ++f] = $NF } 
END { 
    for (i = 1; i <= n; ++i) { 
        print "section", i; f = 0; while (a[i, ++f]) print a[i, f]; print "" 
    }
}'

通过将输入字段分隔符设置为制表符,我们可以通过它们具有多少个字段来识别哪些行是新节的开始。每个部分的开头只有1个字段。

END块中的代码演示了一个事实,即可以a使用两个索引段号字段号在数组中访问每个字段它只是遍历每一个,但是例如,您可以自定义逻辑以打印给定的字段(如果它与某种模式匹配)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Ruby正则表达式匹配文件名的最有效方法

来自分类Dev

在分隔符之间匹配正则表达式的有效方法

来自分类Dev

正则表达式 - 在行首或特定字符之后匹配的最有效表达式

来自分类Dev

正则表达式匹配给定路径的所有有效URL变体

来自分类Dev

正则表达式匹配包含空格的有效绝对Windows目录

来自分类Dev

匹配正则表达式的URL并非一直有效

来自分类Dev

正则表达式,用于匹配句子开头,结尾和中间的有效单词

来自分类Dev

Python在有效的正则表达式上未返回任何匹配项

来自分类Dev

正则表达式匹配有效的电话号码

来自分类Dev

正则表达式以匹配文件夹结构中的有效路径

来自分类Dev

在正则表达式中匹配有效的引号

来自分类Dev

正则表达式用于匹配仅需以有效序列开头开始的模式

来自分类Dev

正则表达式以匹配有效的Java路径标识符

来自分类Dev

关于Ruby正则表达式以匹配有效String的困惑

来自分类Dev

匹配逗号正则表达式有效,但取反无效

来自分类Dev

改进正则表达式以匹配有效值

来自分类Dev

正则表达式仅匹配有效行

来自分类Dev

正则表达式匹配仅适用于有效日期

来自分类Dev

如何获取正则表达式匹配的有效部分

来自分类Dev

有效时匹配数字和破折号的正则表达式

来自分类Dev

正则表达式用于最后一个有效括号之间的文本

来自分类Dev

上一个有效括号之间的文本的正则表达式

来自分类Dev

有效的域名正则表达式

来自分类Dev

更有效的正则表达式

来自分类Dev

有效的正则表达式?

来自分类Dev

在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

来自分类Dev

正则表达式:匹配2个单词之间的所有字符,返回奇怪的输出

来自分类Dev

使用正则表达式删除文档字符串的有效方法

来自分类Dev

将简单表达式映射到有效的正则表达式

Related 相关文章

  1. 1

    使用Ruby正则表达式匹配文件名的最有效方法

  2. 2

    在分隔符之间匹配正则表达式的有效方法

  3. 3

    正则表达式 - 在行首或特定字符之后匹配的最有效表达式

  4. 4

    正则表达式匹配给定路径的所有有效URL变体

  5. 5

    正则表达式匹配包含空格的有效绝对Windows目录

  6. 6

    匹配正则表达式的URL并非一直有效

  7. 7

    正则表达式,用于匹配句子开头,结尾和中间的有效单词

  8. 8

    Python在有效的正则表达式上未返回任何匹配项

  9. 9

    正则表达式匹配有效的电话号码

  10. 10

    正则表达式以匹配文件夹结构中的有效路径

  11. 11

    在正则表达式中匹配有效的引号

  12. 12

    正则表达式用于匹配仅需以有效序列开头开始的模式

  13. 13

    正则表达式以匹配有效的Java路径标识符

  14. 14

    关于Ruby正则表达式以匹配有效String的困惑

  15. 15

    匹配逗号正则表达式有效,但取反无效

  16. 16

    改进正则表达式以匹配有效值

  17. 17

    正则表达式仅匹配有效行

  18. 18

    正则表达式匹配仅适用于有效日期

  19. 19

    如何获取正则表达式匹配的有效部分

  20. 20

    有效时匹配数字和破折号的正则表达式

  21. 21

    正则表达式用于最后一个有效括号之间的文本

  22. 22

    上一个有效括号之间的文本的正则表达式

  23. 23

    有效的域名正则表达式

  24. 24

    更有效的正则表达式

  25. 25

    有效的正则表达式?

  26. 26

    在Ruby中,如何组织大量数据以进行最有效的正则表达式搜索?

  27. 27

    正则表达式:匹配2个单词之间的所有字符,返回奇怪的输出

  28. 28

    使用正则表达式删除文档字符串的有效方法

  29. 29

    将简单表达式映射到有效的正则表达式

热门标签

归档