Chinaunix

标题: 删除匹配行和之后两行,怎么写?
 [打印本页]

作者: johnson0418    时间: 2015-12-14 12:26
标题: 删除匹配行和之后两行,怎么写?


删除匹配行和之后两行,怎么写?


$sed '/Storage/,+2d' a.txt  执行不了。

sed: -e expression #1, char 18: Unexpected ','
作者: waker    时间: 2015-12-14 12:57
/Storage/{$!N;$!N;d}
作者: songyc_2015    时间: 2015-12-14 13:06
awk '/Storage/{n=3}n-->0{next}1' file
作者: jcdiy0601    时间: 2015-12-14 13:23
  1. sed '/Storage/{N;N;d}' file
复制代码

作者: songyc_2015    时间: 2015-12-14 13:33
sed -r '/Storage/{:1;$!N;x;s/^/./;/^.{2}$/!{x;b1};d}' file
作者: johnson0418    时间: 2015-12-14 16:40
回复 3# songyc_2015


    感谢,测试Ok
作者: johnson0418    时间: 2015-12-14 16:41
回复 5# songyc_2015


    已经解决,-r 我的系统 里没有这个参数。
作者: johnson0418    时间: 2015-12-14 16:42
回复 2# waker


    感谢,已解决!你写的太精简了,我搞不清楚
作者: johnson0418    时间: 2015-12-14 16:43
回复 4# jcdiy0601


    感谢,已解决!我试过你的也是有提示 sed: -e expression #1, char 18: Unexpected ','
作者: johnson0418    时间: 2016-01-05 19:35
回复 3# songyc_2015


    awk用的少。再问下:
删除匹配行后面所有的(包括自身行),怎么表达?

   
作者: songyc_2015    时间: 2016-01-05 22:29
回复 10# johnson0418
  1. awk '/Storage/,0{next}1' file
复制代码

作者: 南武水寿    时间: 2016-01-06 09:55
awk '/Storage/{n=3}n-->0{next}1' file   如果把条件n-->0  改成 n-- , 即程序为awk '/Storage/{n=3}n--{next}1' file时, 为什么只打印匹配行后面的第三行,余下的都不打印?
没想明白
回复 3# songyc_2015


   
作者: songyc_2015    时间: 2016-01-06 13:34
回复 12# 南武水寿
  1. (tcp)~/priv/syc> nl file
  2.      1  aaaaaa
  3.      2  bbbbbbb
  4.      3  cccccccc
  5.      4  dddddddddd
  6.      5  eeeeeeeeeee
  7.      6  ffffffffffff
  8. (tcp)~/priv/syc> awk '/aaa/{n=3}n--{next}1' file   
  9. dddddddddd
复制代码
n--{next}等价于if(n--){next},即n先做判断,再自己减一,在awk里,0为false,非0为true
awk读取第1行【aaaaaa】时,n=3不为0,则会执行next
awk读取第2行【bbbbbbb】时,n=2不为0,则会执行next
awk读取第3行【cccccccc】时,n=1不为0,则会执行next
awk读取第4行【dddddddddd】时,n=0为0,则不会执行next,而执行后面的1,这里的1等价于if(1){print $0},即输出dddddddddd
awk读取第5行【eeeeeeeeeee】时,n=-1不为0,则会执行next
awk读取第5行【ffffffffffff】时,n=-2不为0,则会执行next,
awk结束退出。
作者: 南武水寿    时间: 2016-01-06 17:51
soga! 之前我以为条件小于0就不执行{next}
回复 13# songyc_2015


   
作者: johnson0418    时间: 2016-01-06 21:28
回复 11# songyc_2015


    谢谢你!
    如果遇到路径或变量的要加什么符号,试不出来

比如:我要查找的是Storage/abc/def这一段,或是 变量$DT,要加什么符号?
作者: songyc_2015    时间: 2016-01-06 22:43
回复 15# johnson0418
  1. (tcp)~/priv/syc> cat file
  2. bbbbbbb
  3. Storage/abc/def/aaaaaaaaaaaaaaaaaaaa
  4. cccccccc
  5. dddddddddd
  6. eeeeeeeeeee
  7. ffffffffffff
  8. (tcp)~/priv/syc> awk '/Storage\/abc\/def/' file
  9. Storage/abc/def/aaaaaaaaaaaaaaaaaaaa
  10. (tcp)~/priv/syc> awk -vs="Storage/abc/def" '$0~s' file                  
  11. Storage/abc/def/aaaaaaaaaaaaaaaaaaaa
复制代码

作者: johnson0418    时间: 2016-01-06 22:54
回复 16# songyc_2015


    谢谢!
    DT=`date +'%b %d'`
    awk ‘/$DT/,0{next}1' aa.log         中间的变量要加什么符号?
作者: songyc_2015    时间: 2016-01-06 23:00
本帖最后由 songyc_2015 于 2016-01-06 23:01 编辑

回复 17# johnson0418
  1. awk -vs="${DT}" '$0~s,0{next}1' aa.log
复制代码

作者: johnson0418    时间: 2016-01-06 23:25
回复 18# songyc_2015


    感谢你的耐心回复,生活愉快!
作者: baby_神    时间: 2016-01-06 23:57
  1. [root@07 ~]# seq 5 |sed '/2/,+2d'  
  2. 1
  3. 5
复制代码
可以呀,你的为啥不行




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2