gpt4 book ai didi

linux - 使用 linux 从文本文件中有选择地解析注释和值

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:22 24 4
gpt4 key购买 nike

我想解析一个文件,其中包含一些名称 block 顶部的名称和注释。如果我有这样的文件:

Art
Boat
Road
Tree
Street

# Blah
Star
Car
Sun

Sock

# Comm1
# Comm2
Stop
Stick
# Comm
Stock
Dock

我想以某种方式解析此文件,以便提取所有以“S”开头的名称及其相应的注释。相应的注释是紧接其前的注释 block (一行或多行注释),直到在其前面遇到空格。一个注释 block 也适用于它后面的所有条目,直到遇到空格或另一个注释 block 。所以上面输入的输出应该是这样的:

**Name      Comments**

Street
Star # Blah
Sun # Blah
Sock
Stop # Comm1 # Comm2
Stick # Comm1 # Comm2
Stock # Comm

谁能建议一个好的方法来做这件事(最好使用 shell)?真的很感激。谢谢!

PS:如果我的描述不清楚,我深表歉意,这还是新手。

最佳答案

假设您的空白行不包含空格:

sed -n '/^#/H; /^S/{G; y/\n/ /; p}; /^$/h' input

第一个命令 (/^#/H) 将当前行(注释)附加到保留空间。下一个命令将保留空间(包含所有累积的注释)附加到当前缓冲区,用一个空格替换所有换行符,然后打印该行。每当遇到空行时,最终命令都会清除保留空间。

编辑(感谢 blahdiblah)

当检测到一个没有前面空行的新评论 block 时,上面的代码不会正确地重置累加器。这很丑陋,但可以说明这一点:

sed -n '/^#/{h; bk}; :j /^S/{G; y/\n/ /; p}; /^$/h; d; :k n; /^#/{ H; bk}; bj;' input

关于linux - 使用 linux 从文本文件中有选择地解析注释和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11751110/

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