删除文件中的数据范围

时间:2014-07-31 15:49:08

标签: linux

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

文件:

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

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

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

有没有更好的方法可以做到这一点,因为我相信我的方法需要更长的时间和大量的代码来实现?

1 个答案:

答案 0 :(得分:1)

如果您知道数字,可以使用此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

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


更新

  

是的,我从第3行到下一个方括号之前的行

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