gpt4 book ai didi

linux - 给定行分隔的文本 block ,如何返回包含特定关键字的每个 block ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:48 25 4
gpt4 key购买 nike

me$ cat file.txt

Filename: 1
Organization: Bus 1 => Port 1 => Subport 1 => Device 3
Classes: Interface Video
Drivers: usbhid

Filename: 2
Organization: Bus 1 => Port 1 => Subport 3 => Device 4
Classes: Audio
Drivers: usb-audio uvc Video

Filename: 3
Organization: Bus 1 => Port 1 => Subport 4 => Device 5
Classes: Wireless Video
Drivers: uvc

我如何操作它来返回包含任何给定关键字的 block ?

例如:bash this --class "Video"将返回:

Filename: 1
Organization: Bus 1 => Port 1 => Subport 1 => Device 3
Classes: Interface Video
Drivers: usbhid

Filename: 3
Organization: Bus 1 => Port 1 => Subport 4 => Device 5
Classes: Wireless Video
Drivers: uvc

编写脚本来对 --class 和 --driver 案例进行排序是微不足道的,只需要特别询问文本操作。我正在考虑 grep Class:*$input,获取行号,并打印从之前的换行符到下一个换行符的所有内容,但这会带来更多的复杂性,并且可能不是最有效的方法做吧。

最佳答案

获取类(class)...视频:

$ awk -v RS= '/Classes:[^\n]*Video/' file.txt
Filename: 1
Organization: Bus 1 => Port 1 => Subport 1 => Device 3
Classes: Interface Video
Drivers: usbhid
Filename: 3
Organization: Bus 1 => Port 1 => Subport 4 => Device 5
Classes: Wireless Video
Drivers: uvc

(我用 mawk 和 GNU awk 对此进行了测试,它应该可以与任何 POSIX awk 一起使用 [帽子提示:ninjalj)但它可能与 very old versions 不兼容| awk.)

工作原理

  • -v RS=

    这会将记录分隔符设置为一个空字符串,通常将其解释为有意义的段落。

  • /Classes:[^\n]*Video/

    如果记录(段落)包含 Classes:,后跟除换行符之外的任意数量的任何字符,然后是 Video,则返回 true。换句话说,如果 一行 包含字符串 Classes: 并且随后包含字符串 Video,则它返回 true。如果此条件返回真,则 awk 执行默认操作,即打印记录(段落)。

关于linux - 给定行分隔的文本 block ,如何返回包含特定关键字的每个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009199/

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