请问如果删除匹配行之间的行。 谢谢

560阅读 0评论2009-09-02 greendays
分类:

| | | | IT168安防监控频道全新上线
[] [] [] [] []
  帅哥
骑士




CU编号: 372862
注册:2006-2-15
最后登录: 2009-09-01
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 15:53 

比如我有一个文本。
a
begin
1          <-----  delete
a          <-----  delete
2          <-----  delete
end
c
begin
c
end
a
begin
1

我想删除第一个begin开始,end结束的内容。
a
begin
end
c
begin
c
end
a
begin
1



您对本贴的看法:
| | |
  帅哥 (黑哥)
法师



CU编号: 631768
注册:2007-10-22
最后登录: 2009-09-02
帖子:
精华:0







来自:小山村
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 16:11 

gsed:

CODE:
sed '0,/begin/b;0,/end/{/end/!d}' urfile

awk:

CODE:
awk -v RS='(begin|end)\n' 'NR!=2{printf $0}{printf RT}' urfile




您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.  DRY


| | |

骑士



CU编号: 2340978
注册:2009-8-14
最后登录: 2009-09-02
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 16:22 

喜欢用sed ,:mrgreen: :mrgreen: :mrgreen:



您对本贴的看法:

__________________________________

如果你恨一个男人,就把他的女人揍成李宇春,让他无法享受上半身的快乐,
如果你狠一个女人,就把她的男人揍成李宇春,让她无法享受下半身的快乐。
| | |
  帅哥 (黑哥)
法师



CU编号: 631768
注册:2007-10-22
最后登录: 2009-09-02
帖子:
精华:0







来自:小山村
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 16:25 

awk '/begin|end/{d++;print;next}d!=1' urfile



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.  DRY


| | |
  帅哥
骑士




CU编号: 372862
注册:2006-2-15
最后登录: 2009-09-01
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 16:33 



QUOTE:
原帖由 blackold 于 2009-9-1 16:25 发表
awk '/begin|end/{d++;print;next}d!=1' urfile

非常感谢,这个很好。



您对本贴的看法:
| | |
  帅哥
天使



CU编号: 75493
注册:2003-7-25
最后登录: 2009-09-02
帖子:
精华:0







来自:Hangzhou
状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 17:00 

写一个练习一下……

CODE:
awk '/begin/&&a==0{print;while($0!~/end/)getline;a++}1' urfile




您对本贴的看法:
| | |
  帅哥 (狼烟)
天使
八十万色狼总教头



CU编号: 547805
注册:2007-4-5
最后登录: 2009-09-02
帖子:
精华:0







来自:北京
状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 18:17 



CODE:
sed -n '0,/begin/p;/end/,$p' URFILE




您对本贴的看法:
| | |

精灵王
Loa



CU编号: 1650889
注册:2009-5-16
最后登录: 2009-09-02
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 19:24 

回复 #4 blackold 的帖子

这想法,,真牛



您对本贴的看法:

__________________________________

我觉得我还可以抢救一下...............
| | |

精灵王




CU编号: 1127759
注册:2009-3-16
最后登录: 2009-09-02
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-9-1 20:28 

比不上大牛,简单点,可以分两步做。

第一步,awk '/begin/,/end/{print $1,“\t”,NR}' test,用肉眼看begin和end之间的行数。

第二部,sed '3,5d' test,删除就可以了。

[ 本帖最后由 小木虫子 于 2009-9-1 20:30 编辑 ]



您对本贴的看法:
| | |

精灵




CU编号: 358466
注册:2006-1-4
最后登录: 2009-09-02
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-9-2 11:30 

sed的带入貌似我在shell外面可以 里面就不行了...奇怪
#!/bin/bash
FILE="abc.txt"

ab=`grep -n "begin" $FILE|head -n 1|awk -F: '{print $1}'`
ba=`grep -n "end" $FILE|head -n 1|awk -F '{print $1}'`

sed ''"$ab"','"$ba"'d' abc.txt

不是 '"$ab"'
这样可以带入变量么



您对本贴的看法:
| | |

» » »
| | | | IT168安防监控频道全新上线
[] [] [] [] []
  帅哥
精灵



CU编号: 159332
注册:2004-5-19
最后登录: 2009-09-02
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-9-2 12:10 



QUOTE:
原帖由 blackold 于 2009-9-1 16:25 发表
awk '/begin|end/{d++;print;next}d!=1' urfile

应该用exit,不检索后面的文件内容会刚好点吧



您对本贴的看法:

__________________________________

任何学校都不能以学生为赚钱对象!没有那个国家把学生做为商品和财源来榨取的。

| | |
上一篇: awk中如何导入两个以上外部变量
下一篇:日志文档提取信息