我正在尝试使用linux bash脚本删除文件中的一系列数据。
文件:
1. [/]
2.
3. [A:/]
4. Test1 = rw
5. Test2 = r
6. * =
7.
8. [B:/]
9. Test3 = r
我想删除第3-7行。我看过使用grep,它返回搜索条件([)和行号的实例,但它返回一个长字符串。然后我会尝试拆分字符串并获取要删除的相关数据。
我将知道第3行的数据,但我不知道括号中的下一项是什么,因此需要搜索才能找到该部分。
有没有更好的方法可以做到这一点,因为我相信我的方法需要更长的时间和大量的代码来实现?
答案 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