gpt4 book ai didi

bash - 如果前一行是前缀,则删除行(从输出中省略)

转载 作者:行者123 更新时间:2023-11-29 09:36:11 33 4
gpt4 key购买 nike

这与问题“remove duplicate lines with similar prefix”非常相似,但恰恰相反:

给定输入的排序字符串(在本例中为目录),例如:

a/
a/b/c/
a/d/
bar/foo/
bar/foo2/
c/d/
c/d/e/

我想从输出中删除行,如果前一行是当前行的前缀。在这种情况下,输出将是:

a/
bar/foo/
bar/foo2/
c/d/

用 Python 等编写代码会很容易,但在这种情况下,我在 shell 环境中(bash、sort、sed、awk...)。 (重新排序没问题。)

最佳答案

使用 awk:

awk '{if(k && match($0, k))next; k="^"$0}1' file

k="^"$0 将模式锚定到字符串的开头。

在主 block 之前可能需要 NF>0 以防出现空行。

更新:如果变量 k 中存在正则表达式元字符,则可能会出现问题,下面不使用正则表达式的行应该更好:

awk '{if(k && index($0, k)==1)next; k=$0}1' file

Update-2:感谢@Ed,我已经调整了第二种方法以涵盖评估为零的非空行(不过空行将保持原样):

awk '{if(k!="" && index($0,k)==1)next;k=$0}1' file

关于bash - 如果前一行是前缀,则删除行(从输出中省略),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50547915/

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