码迷,mamicode.com
首页 > 系统相关 > 详细

linux sed 个人常用的

时间:2015-07-24 00:07:56      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:linux

一、sed 

 1. 替换每行第n(如果有的话)个匹配


        sed "s/regexpr/anyword/${n}" filename

cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
举例
sed "s/4/ 四 /8" filename
111111111111111111
222222222222222222
333333333333333333
4444444 四 4444444444

2.替换每行第一个匹配

[ - ]

CODE:

    sed ‘s/regexpr/anyword/‘ filename
    sed ‘s/regexpr/anyword/1‘ filename


举例:

QUOTE:

cat filename
1234567890 2345678901
3456789012 4567890123
sed ‘s/5/五/‘ filename
1234五67890 2345678901
34五6789012 4567890123

3.行号处理

           1> 为文件加行号

CODE:

sed = filename|sed ‘N;s/\n/:/‘
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444


举例

[ - ]

CODE:

sed = filename|sed ‘N;s/\n/:/‘ filename
1:111111111111111111
2:222222222222222222
3:333333333333333333
4:444444444444444444

            2>仅为文件中的正文行加行号

[ - ]

CODE:

cat filename
111111111111111111

222222222222222222
333333333333333333

444444444444444444

sed /./= a|sed ‘/./N;s/\n/:/‘ filename
1:111111111111111111

3:222222222222222222
4:333333333333333333

6:444444444444444444

            3>.字串翻转

[ - ]

CODE:

echo 1234567890|sed ‘/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//‘
0987654321

#########################################################

#########################################################

四.选择性输出


1.打印文档奇数行(隔行输出)

[ - ]

CODE:

sed ‘n;d‘
sed ‘x;$!N;x‘
sed -n ‘p;n‘

1
3
5
7


2.打印偶数行(隔行输出)

[ - ]

CODE:

sed -n ‘n;p‘
sed ‘1d;n;d;‘
2
4
6
8


3.删除连续重复行(大量使用了pattern space 文件太大时要注意)

[ - ]

CODE:

sed ‘$!N; /^\(.*\)\n\1$/!P; D‘     
#使用 $!N 要当心内存溢出


举例

[ - ]

CODE:

cat file
111111111111111111
222222222222222222
222222222222222222
333333333333333333
444444444444444444
444444444444444444
444444444444444444
444444444444444444
444444444444444444

sed ‘$!N; /^\(.*\)\n\1$/!P; D‘ filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444

4.合并上下行并以空格相分隔

[ - ]

CODE:

cat file
1234567890
0987654321
执行命令后
1234567890 0987654321


5.将以\符号结尾的行与下行合并并以空格分隔(拼接断行)

[ - ]

CODE:

cat filename
1 111111111111111111\
2 222222222222222222
3 333333333333333333\
4 444444444444444444

sed -e :a -e ‘/\\$/N; s/\\\n/ /; ta‘ filename
1 111111111111111111 2 222222222222222222
3 333333333333333333 4 444444444444444444

6.按关键字拼接行
  如果某行以=开始,则合并到上一行并替代=为空格

[ - ]

CODE:

cat file
111111111111111111
222222222222222222 
=333333333333333333
444444444444444444

sed -e :a -e ‘$!N;s/\n=/ /;ta‘ -e ‘P;D‘ filename
111111111111111111
222222222222222222 333333333333333333
444444444444444444


7.输出匹配行的下一行

[ - ]

CODE:

cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n ‘/^3/{n;p;}‘ filename
4 444444444444444444

8.显示匹配行的行号并输出匹配行的上行、匹配行、下行

sed -n -e ‘/regexpr/{=;x;1!p;g;$!N;p;D;}‘ -e h
举例

[ - ]

CODE:

cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n -e ‘/^3/{=;x;1!p;g;$!N;p;D;}‘ -e h  filename
3                                       #匹配行的行号
2 222222222222222222  #上一行
3 333333333333333333  #匹配行
4 444444444444444444  #下一行

9.删除文档中某标志区域内的关键字匹配行

     删除文档中从being开到end结束的块中包含myword的行

[ - ]

CODE:

sed ‘/^begin/,/^end/{/myword/d;}‘ filename




QUOTE:

cat filename
myword
begin
myword
Number!
myword
Number!
myword
Number!
myword
Number!

end
myword
Number!


测试

QUOTE:

myword
begin
Number!
Number!
Number!
Number!

end
myword
Number!

五.字串解析

1.从字串中解析出两个子串(前2各字符和后9个字符)

[ - ]

CODE:

echo "WeLoveChinaUnix"|sed -e ‘H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n/ /‘
We ChinaUnix


2.分解日期串

[ - ]

CODE:

echo 20030922|sed ‘s/\(....\)\(..\)\(..\)/\1 \2 \3/‘|read year month day
echo $year $month $day
2003 09 22

######################################################################################

########################################################################################

cat file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc 
2 192.148.99.253 [17/Jun/2003:11:18:21 /si 
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp 
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap 
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/ 
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc 
3 192.93.108.187 [17/Jun/2003:14:39:11 /si 
5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/ 
9 192.68.82.78   [05/Jun/2003:00:05:45 /ss 
4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/


d=6
取文件的第六行,则
单引号

[ - ]

CODE:

sed -n ‘‘"$d"‘/p‘  file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc


双引号

[ - ]

CODE:

sed -n "$d"p file  or  sed -n "${d}p" file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc


结果完全相同。
又:
取文件的第1到第6行,则:
单引号:

[ - ]

CODE:

sed -n ‘1,‘"$d"‘p‘ file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
2 192.148.99.253 [17/Jun/2003:11:18:21 /si
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc


linux sed 个人常用的

标签:linux

原文地址:http://9869300.blog.51cto.com/9859300/1677681

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!