gpt4 book ai didi

linux - 从第二次出现的模式 block 中删除

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

以“File:”和“Modify:”开头的每一行
我需要从“修改”行 block 中第二次出现的“修改”模式中删除。
在每个“修改 block ”中保留第一次出现的“修改”

基于本文

  File: /Music/David Bowe/1.mp3
Modify: 2010-11-24 09:36:33.000000000 -0200
Modify: 2016-04-13 11:32:58.692458900 -0300
File: /Music/Music/David Bowe/Tom.mp3
Modify: 2010-10-22 11:12:15.000000000 -0200
File: /Music/Music/David Bowe/Hero.mp3
Modify: 2010-10-26 07:21:56.000000000 -0200
Modify: 2017-04-13 11:32:58.282458400 -0300
File: /Music/Music/David Bowe/AbsoluteBeginners.mp3
Modify: 2010-10-22 11:12:07.000000000 -0200
File: /Music/Music/David Bowe/ImAfraidOfAmericans.mp3
Modify: 2011-11-13 08:54:57.000000000 -0200
Modify: 2015-04-13 11:32:58.732459000 -0300
Modify: 2016-04-13 11:32:58.692458900 -0300
Modify: 2016-01-01 21:18:53.348891500 -0200

我想得到这个结果

  File: /Music/David Bowe/1.mp3
Modify: 2010-11-24 09:36:33.000000000 -0200
File: /Music/Music/David Bowe/Tom.mp3
Modify: 2010-10-22 11:12:15.000000000 -0200
File: /Music/Music/David Bowe/Hero.mp3
Modify: 2010-10-26 07:21:56.000000000 -0200
File: /Music/Music/David Bowe/AbsoluteBeginners.mp3
Modify: 2010-10-22 11:12:07.000000000 -0200
File: /Music/Music/David Bowe/ImAfraidOfAmericans.mp3
Modify: 2011-11-13 08:54:57.000000000 -0200

sed '/^Modify:/d' sample.txt 不起作用,因为我删除了该模式的所有出现。

sed '/^Modify:/2,$d' sample.txt尝试从第 2 次到最后一次删除不再起作用(语法错误)

最佳答案

这可能对你有用(GNU sed):

sed -n '/File/,/Modify/p' file

关闭 seds 正常打印每行,仅在指定时打印。打印 FileModify 之间的行范围,所有其他行将不会被打印。

更强大的解决方案:

sed -n '/^  File:/{N;/^Modify:/M!D;p}' file

使用 -n 类似 grep 的选项。匹配特定的 File: 行,追加下一行并匹配特定的 Modify: 行,如果不匹配则删除第一行并重复,否则打印两行并重复。

注意当删除第一行时,seds 不会进行正常处理。因为模式空间不为空,所以不会自动读取下一行并且命令循环开始,就好像它已经被读取一样,即第二行附加了 N 命令,现在成为第一行在模式空间中,要执行的第一条指令是 /^ File:/

关于linux - 从第二次出现的模式 block 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517105/

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