gpt4 book ai didi

unix - 如何使用 Unix grep 删除整 block 不需要的文本?

转载 作者:行者123 更新时间:2023-12-04 04:32:19 26 4
gpt4 key购买 nike

一直在努力尝试,但仍然想不出任何更聪明的方法来做到这一点......

例子:

### this is the whole block structure ###
text_text_text
text_text_text
text_text_text
apple
### another block ###
text_text_text
text_text_text
text_text_text
orange

less <file_name> | grep -B3 "apple" | less将返回:
text_text_text
text_text_text
text_text_text
apple

但现在我的要求是我不想要这个块(用苹果)。我确定我不想要什么,但不确定我想要什么。所以我不能这样做
less <file_name> | grep -B3 "orange" |less

如果我要:
less <file_name> | grep -v "apple" | less

然后只删除带有苹果的一行,与苹果相关的块将保留在那里。

我试过
less <file_name> | grep -v -B3 "apple" | less

但这似乎不起作用。

那么有什么方法可以帮助我删除与苹果相关的那个块?

最佳答案

删除不需要的块的一种方法是使用 tacsed .说:

tac <filename> | sed '/apple/,+3d' | tac

会返回:
### this is the whole block structure ###
### another block ###
text_text_text
text_text_text
text_text_text
orange

为您的样本数据。

说明: tac反转文件中的行。 /apple/,+3会匹配 apple以及接下来的 3 行。 ddelete命令。

由于您需要删除模式 apple以及它之前的 3 行;我们反转文件中的行,找到 apple ,删除它和接下来的 3 行,然后再次反转这些行以获得所需的结果。

您可能还想引用 sed manual .

关于unix - 如何使用 Unix grep 删除整 block 不需要的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392109/

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