Chinaunix首页 | 论坛 | 博客
  • 博客访问: 315803
  • 博文数量: 240
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-04 18:14
文章分类

全部博文(240)

文章存档

2017年(8)

2014年(4)

2013年(15)

2012年(4)

2011年(14)

2010年(55)

2009年(140)

我的朋友

分类: LINUX

2009-03-23 07:54:25

sed 命令关键字:
p  表示打印,必须与 -n 一起使用
=  表示显示定位行的行号
a\ 附加新文本
i\ 插入新文本
c\ 用新的文本
d  删除定位行
s  表示替换模式
g  表示粘贴模式

 

1. 用sed匹配模式:
sed -n '1p' test  匹配第一行
sed -n '3,5p' test  匹配三到五行
sed -n '$p' test  匹配最后一行
sed -n '/zhaohang/p' test 匹配包含 zhaohang 的行
sed -n '/zhaohang/!p' test 匹配不包含 zhaohang 的行
sed -n '/\$/p' test  匹配包含元字符 $ 的行
sed -n '/zhaohang/=' test 打印包含 zhaohang 的行所在行的编号
sed -e '/zhaohang/=' test 打印全部文本,并将包含 zhaohang 的行的行号打印出来


一个准确匹配并替换的范例:
cat file
PURPLEMONTH = 88
PURPLEMONTHDAYSTART = 99

sed -n '/PURPLEMONTH\>/p' file
PURPLEMONTH = 88

sed  '/PURPLEMONTH\>/ c\PURPLEMONTH = 8888' file
PURPLEMONTH = 8888
PURPLEMONTHDAYSTART = 99

 

2.插入文本和附加文本:
sed '/sleep/i\This is a test.' test  在包含sleep的行前插入一行 “This is a test”
sed '/sleep/a\This is a test.' test  在包含sleep的行后附加一行 “This is a test”
sed '/sleep/r killpid.sh' test   在test文件的包含sleep的行后插入killpid.sh文件里的所有内容
sed '/zhaohang/i\zhaohang' test 在包含“zhaohang”的行前插入一行 “zhaohang”,不改变原文件
sed '/zhaohang/i\zhaohang' -i test 在包含“zhaohang”的行前插入一行 “zhaohang”,在原文件里直接修改
sed '5 i\ 123' -i test           在第5行之前插入一新行,内容为123
sed '$ a\ 123' -i test    在最后一行之后附加一行 123

 

3.删除文本
sed '/zhaohang/d' test        删除包含 zhaohang 的行
sed '$d' test           删除最后一行
sed '1d' test           删除第一行
sed '/^$/d'test          删除空行
sed '8,9d' test          删除8 9 行
cat test|tr -d 1,2|sed s/^[[:space:]]*//g     删除文件前两列
cat test|tr -d 2|sed 's/\t\t/\t/'             删除文件第二列
sed '/muahao/,+2d' file                    删除匹配行及下方两行

 

4.替换文本
sed '/sleep/c\SLEEP=60' test      找到包含sleep的行,并删除该行,用新文本SLEEP=60替换该行文本
sed 's/lovely/Lovely.he/g' test > test.txt   将lovely替换为Lovely.he,并将修改后内容输出到test.txt,原test文件内容不做修改
sed -e '/subject_round/s/1/0/g' -i test    修改包含subject_round的行里的“1”为“0”
sed -e '/sub/s/1/0/' -e '/foun/s/1/0/' -i test  修改包含sub和foun的行里的“1”为“0”
sed 's/user/USER/' /etc/passwd       将第1个user替换成USER,g表明全局替换
sed 's/user/USER/g' /etc/passwd      将所有user替换成USER
sed '/=m$/s/^/#/g'  filename              将=m结尾的行注释掉
sed '3,5 s/^/#/'  filename                   将3-5行注释掉
sed '10 s/^/#/'  filename                   将第10行注释掉

echo JR-TJ07-GWServer01 |sed 's/GW.*$/config/g'        将后半部分任意字符替换,打印出 JR-TJ-config

 


5.下面是一些命令集,sed 无法识别的原字符可以用 \ 来屏蔽。

's/\.$//g'  删除以句点结尾行
cat txt|tr -s ' '   删除一个以上空格,用一个空格代替
cat txt|tr -s ' '|sed s/^.//g          删除行首空格
cat txt|sed s/^[[:space:]]*//g    删除行首空格
'/^$/d'   删除空行
's/^.//g'  删除第一个字符
's/COL\(...\)//g' 删除紧跟COL的后三个字母
's/^\///g'  从路径中删除第一个\
for i in `cat tmp.txt|grep -v ^$|tr -s ' '|sed s/^.//g`;do echo \'$i\',;done      将文件格式化
cat txt|tr -d '\n'              删除换行

 

6、一些稍微复杂的处理应用:

sed '/ sed '// a\\t\t\n\t\t95<\/xiaoyaodao_mapid>' -i game.xml
sed '/(删除配置文件中多余的空行,用<过滤,将不包含此符号的行删除!)

bash-3.2$ cat aa
20090807 00:00:00
 
bash-3.2$ sed '/security/s/>.*This is a test.This is a test.
 
bash-3.2$ sed -r '/security/s/[0-9]{8} [0-9]{2}:[0-9]{2}:[0-9]{2}/This is a test./' aa
This is a test.

cat my.txt|sed s/a/A/2 >n.txt   指定第二列,将1.txt文件中包含a的第二列中的a替换为A,并将结果写入n.txt文件中。


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