Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2315823
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: LINUX

2011-03-29 10:00:22

例如:文本a
  1. [root@vm-1 ~]# cat a
  2. aaa
  3. bbb
  4. ccc
  5. aaa
  6. }
sed删除最后一行
  1. sed -i '$d' filename
例:
  1. [root@vm-1 ~]# sed -i '$d' a
  2. [root@vm-1 ~]# cat a
  3. aaa
  4. bbb
  5. ccc
  6. aaa
sed删除匹配行一直到某一行
  1. sed -i '/match_strings/,$d' filename
例:删除}直到文本结尾的数据
  1. [root@vm-1 ~]# sed -i '/}/,$d' a
  2. [root@vm-1 ~]# cat a
  3. aaa
  4. bbb
  5. ccc
  6. aaa
在某行之前添加数据:
  1. sed -i 'linenum i\rrrrrrr' filename
例:在第4行之前添加数据rrrrrrr
  1. [root@vm-1 ~]# sed -i '4 i\rrrrrrr' a
  2. [root@vm-1 ~]# cat a
  3. aaa
  4. bbb
  5. ccc
  6. rrrrrrr
  7. aaa
找出文本中某一字符串最后一次出现的行号:
  1. linenum=$(awk '/match_strings/{last=NR} END{print last}' filename)
  2. echo $linenum
例:
  1. [root@vm-1 ~]# linenum=$(awk '/aaa/{last=NR} END{print last}' a)
  2. [root@vm-1 ~]# echo $linenum
  3. 4





阅读(2763) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

owinux2011-04-01 23:42:12

GFree_Wind: 就我所知,至少sed没有直接定位倒数第几行的方法。因为不需要嘛。Unix的哲学就是每个工具尽量简单,但组合起来,威力无穷。但是不排除sed有高级的用法可以实现。.....
恩,多谢。现在需要深入学习一下sed的详细用法了。

GFree_Wind2011-04-01 13:34:46

就我所知,至少sed没有直接定位倒数第几行的方法。因为不需要嘛。Unix的哲学就是每个工具尽量简单,但组合起来,威力无穷。但是不排除sed有高级的用法可以实现。就是即使有,也是很麻烦。不如我刚说的那样简单。

owinux2011-04-01 12:35:17

GFree_Wind: 我来提供一个方法。假设你要处理的文本是tmp.txt.
这样做:
tac tmp.txt | sed -e '2 你的操作'  | tac
这样就搞定了。主要是使用tac来颠倒文件,从而将倒数第
好方法,学习了。
另外单靠sed操作是不是就不现实了?

GFree_Wind2011-04-01 10:25:52

我来提供一个方法。假设你要处理的文本是tmp.txt.
这样做:
tac tmp.txt | sed -e '2 你的操作'  | tac
这样就搞定了。主要是使用tac来颠倒文件,从而将倒数第二行,变为正数第二行,然后处理完,再颠倒回去。

owinux2011-03-31 22:49:05

不错。
我有个问题想请教一下:
sed如何匹配倒数第二行?
有方法吗