我正在尝试使用linux bash脚本删除文件中的一系列数据。
文件:
1. [/]
2.
3. [A:/]
4. Test1 = rw
5. Test2 = r
6. * =
7.
8. [B:/]
9. Test3 = r我正在尝试删除第3-7行。我研究过使用grep,它返回搜索条件([)和行号的实例,但它以长字符串的形式返回。然后,我将尝试拆分字符串,并获取要删除的相关数据。
我将知道第3行的数据,但我不知道括号中的下一项是什么,因此需要搜索才能找到该部分。
有没有更好的方法来做这件事,因为我相信我的方法会花费更长的时间和大量的代码来实现?
发布于 2014-07-31 23:52:17
如果你知道这些数字,你可以使用这个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条件下的默认行为是打印行,因此它会在未设置标志时打印行。
更新
是的,我从第3行到下一个方括号之前的行
$ awk '{if (f==1 && $0 ~ /\[/) f=0} NR==3 {f=1} !f' file
1. [/]
2.
8. [B:/]
9. Test3 = rhttps://stackoverflow.com/questions/25063471
复制相似问题