sed的替换问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

sed的替换问题

#1

帖子 eexpress » 2008-03-16 20:38

☎ cat tmp
1
2
3
4
5
6
7
8
9
10
☎ sed -e '/5/{h;d}' -e '$x' tmp
1
2
3
4
6
7
8
9
5
找到匹配5的行,放到尾巴上。少了一行(如果文件尾巴有一空行,就对头)。其实是想放到文件第一行。
☎ sed -e '/5/{h;d}' -e '1x' tmp

2
3
4
6
7
8
9
10
更加不对。插入/追加行也试过。

:cry:
:cry:
● 鸣学
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2008-03-16 21:06

spikerman iGoogle: sed -e '/5/{h;d}' -e '$G' tmp'
我是看晕了。G可以。现在剩下不tac,放到第一行的事情了。
● 鸣学
searland
帖子: 29
注册时间: 2006-07-16 2:26

#3

帖子 searland » 2008-03-20 11:14

1. 楼主为什么认为 sed -e '/5/{h;d}' -e '$x' tmp 后,结果最后需要一个空行呢。
2. sed执行时是line by line的吧,所以-e '1x' 在第一行放入pattern space的时候就执行,此时的holding buffer为空,所以将第一行换为空行。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress » 2008-03-20 11:16

只是一个大写错误拉。现在是确定了,不能前插入,只有追加。如果有办法,欢迎跟。
● 鸣学
baic
帖子: 166
注册时间: 2006-08-22 23:10

#5

帖子 baic » 2008-03-29 14:43

:o 学到了 :lol:
sed -e '/1/{h;d};/[234]/{H;d};/5/{G}' tmp
5123
帖子: 11
注册时间: 2008-03-23 18:17
来自: 杭州

#6

帖子 5123 » 2008-04-01 20:10

viewtopic.php?t=112618
遇到和楼主一样的问题,郁闷中
回复