gpt4 book ai didi

linux - 删除文件中的数据范围

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

我正在尝试使用 linux bash 脚本删除文件内的一系列数据。

文件:

1. [/]
2.
3. [A:/]
4. Test1 = rw
5. Test2 = r
6. * =
7.
8. [B:/]
9. Test3 = r

我正在尝试删除第 3-7 行。我看过使用 grep,它返回搜索条件 ([) 和行号的实例,但它返回一个长字符串。然后我会尝试拆分字符串并获取要删除的相关数据。

我会知道第 3 行的数据,但我不知道括号中的下一项是什么,因此需要搜索才能找到该部分。

有谁能找到更好的方法来实现这一点,因为我相信我的方法会花费更长的时间和大量的代码来实现?

最佳答案

如果你知道数字,你可以使用这个 awk:

$ awk 'NR<3 || NR>7' a
1. [/]
2.
8. [B:/]
9. Test3 = r

否则,使用它来跳过 [A](包含)和 [B](不包含)之间的行:

$ awk '/[A]/ {f=1} /[B]/ {f=0} !f' a
1. [/]
2.
8. [B:/]
9. Test3 = r

这会在找到 [A] 时设置标志 f,并在找到 [B] 时取消设置。然后,!f 条件在未设置标志时为真。由于 awk 在 true 条件下的默认行为是打印行,因此它会在未设置标志时打印行。


更新

Yeah, im after from line 3 to the line before the next square brackets

$ awk '{if (f==1 && $0 ~ /\[/) f=0} NR==3 {f=1} !f' file
1. [/]
2.
8. [B:/]
9. Test3 = r

关于linux - 删除文件中的数据范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063471/

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