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

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

我正试图删除第3-7行。我研究了使用grep返回搜索条件([)和行号的实例,但它返回的字符串很长。然后,我将尝试拆分字符串并获取要删除的相关数据。
我将知道第3行的数据,但我不知道括号中的下一项是什么,因此需要搜索以找到该部分。
我相信我的方法需要很长的时间和大量的代码来实现,有没有人能用更好的方法来实现呢?

最佳答案

你可以用这个锥子,如果你知道号码:

$ 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

在找到f时设置标志[A],在找到[B]时取消设置。然后,!f条件在未设置标志时为真。由于awk在true条件下的默认行为是打印行,因此它在未设置标志时打印行。
更新
是的,我从第3行到下一个方括号前的那一行
$ 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/

10-13 04:10
查看更多