sed 笔记

sed常见命令

cat test.txt 
101,henan,zhengzhou
102,shandong,jinan
103,anhui,hefei
104,shangdong,qingdao
101,henan,zhengzhou
102,shandong,jinan
103,anhui,hefei
104,shangdong,qingdao

a,全局替换(s###g)

1,对关键字进行匹配替换

  • ]# sed -r ‘s#henan#Henan#g’ test.txt #将文档中得henan字符替换为Henan。
]# sed -r 's#henan#Henan#g' test.txt  
101,Henan,zhengzhou
102,shandong,jinan
103,anhui,hefei
104,shangdong,qingdao
105,Henan,zhengzhou
106,shandong,jinan
107,anhui,hefei
108,shangdong,qingdao

2,向行首添加字符

  • sed ‘s#^#zhongguo &#g’ test.txt (向行首添加字符)
  • awk -F’[ #]+’ ‘{print $2,$3,$4}’ test.txt (可以用这条命令恢复)
]# sed  's#^#zhongguo &#g' test.txt 
zhongguo 101,henan,zhengzhou  
zhongguo 102,shandong,jinan  
zhongguo 103,anhui,hefei  
zhongguo 104,shangdong,qingdao  
zhongguo 105,henan,zhengzhou  
zhongguo 106,shandong,jinan  
zhongguo 107,anhui,hefei  
zhongguo 108,shangdong,qingdao  
zhongguo zhongguo,beijing,tiananmen  
zhongguo 110,shanghai,minhang  
zhongguo   
zhongguo #welcome to henan

3,行尾添加字符

  • ]# sed ‘s#$#,beijing#g’ test.txt (向行尾添加字段",beijing")
]# sed 's#$#,beijing#g' test.txt 
101,henan,zhengzhou,beijing
102,shandong,jinan,beijing
103,anhui,hefei,beijing
104,shangdong,qingdao,beijing
105,henan,zhengzhou,beijing
106,shandong,jinan,beijing
107,anhui,hefei,beijing
108,shangdong,qingdao,beijing
zhongguo,beijing,tiananmen,beijing
110,shanghai,minhang,beijing
,beijing
#welcome to henan,beijing
1212,beijing

b,打印指定行或指定范围的行(指定行到结尾)

1, 打印指定行

sed -n ‘3p’ test.txt

]# sed -n '3p' test.txt 
103,anhui,hefei

2,按行的范围打印

sed -n ‘3,5p’ test.txt

]# sed -n '3,5p' test.txt 
103,anhui,hefei
104,shangdong,qingdao
105,henan,zhengzhou

3,打印指定行到最后一行

sed -n ‘7,$p’ test.txt

]# sed -n '7,$p' test.txt 
107,anhui,hefei
108,shangdong,qingdao
zhongguo,beijing,tiananmen
110,shanghai,minhang

c,过滤

1, 按关键字匹配

sed -n ‘/henan/p’ test.txt

]# sed -n '/henan/p' test.txt 
101,henan,zhengzhou
105,henan,zhengzhou

2,按关键字范围进行匹配 (可以应用于日志查找)

sed -n ‘/103/,/107/p’ test.txt

]# sed -n '/103/,/107/p' test.txt 
103,anhui,hefei
104,shangdong,qingdao
105,henan,zhengzhou
106,shandong,jinan
107,anhui,hefei

此案例可以应用查看日志方面 比如:过滤nginx日志

  • sed -n ‘/10:14:21/p’ nginx.log
  • sed -n ‘/10:13:21/,/12:30:21/p’ nginx.log

sed命令的那些事
表示范围过滤的时候,如果结尾的内容匹配不到,就是一直显示到末尾

3,过滤空行

]# sed -n ‘/^$/!p’ test.txt

d, 删除

-d 选项

1, 删除指定行

sed ‘3d’ test.txt #删除第三行

 ]# sed '3d' test.txt 
101,henan,zhengzhou
102,shandong,jinan
104,shangdong,qingdao
105,henan,zhengzhou
106,shandong,jinan
107,anhui,hefei
108,shangdong,qingdao
zhongguo,beijing,tiananmen
110,shanghai,minhang

2, 删除空行、注释行

  • ]# sed -r ‘/^$|#/d’ test.txt #删除空行、注释行
  • ]# egrep -v ‘^$|#’ test.txt #删除空行、注释行
  • ]# sed -nr ‘/^$|#/!p’ test.txt #删除空行、注释行
]# sed -r '/^$|#/d' test.txt 
101,henan,zhengzhou
102,shandong,jinan
103,anhui,hefei
104,shangdong,qingdao
105,henan,zhengzhou
106,shandong,jinan
107,anhui,hefei
108,shangdong,qingdao
zhongguo,beijing,tiananmen
110,shanghai,minhang
]# egrep -v '^$|#' test.txt 
101,henan,zhengzhou
102,shandong,jinan
103,anhui,hefei
104,shangdong,qingdao
105,henan,zhengzhou
106,shandong,jinan
107,anhui,hefei
108,shangdong,qingdao
zhongguo,beijing,tiananmen
110,shanghai,minhang

3,删除匹配行

]# sed ‘/1212/d’ test.txt (删除匹配项1212所在的行)

4,删除最后一行

]# sed ‘$d’ test.txt

e, cai操作

  • c replace 替换这一行的内容
  • a append 追加,向指定的行或每一行追加内容(行后面)
  • i insert 插入,向指定的行或每一行插入内容(行前面)

1,追加 -指定行追加,最后一行追加

  • ]# sed ‘11a 112,henan,UFO’ test.txt #向第11行后添加一行

  • ]# sed ‘$a test’ test.txt (向最后一行追加一行内容)

关于windows、linux 系统下换行符的问题

在Unix系统里,每行结尾只有"<换行>“,即“\n”;
在windows系统里,每行结尾是”<换行><回车>“,即”\n\r";
直接后果就是Unix系统下的文件在Windows里打开的话,所有文字会变成一行;
Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。
cat -A test.txt
在这里插入图片描述

那么问题来了,在unix系统中怎么去消除这个问题
要把文件转换一下,有两种方法:
1.命令dos2unix test.file
2.去掉"\r" ,用命令sed -i ‘s/\r//’ test.file

命令p输出:

命令完整示例说明
psed -n ‘p’ test.txt输出文档所有行
2psed -n ‘2p’ test.txt输出文档第二行
2,5psed -n ‘2,5p’ test.txt输出文档的第二行到第五行
2,+5psed -n ‘2,+5p’ test.txt输出第二行(包括第二行)后面的五行内容
1~2psed -n ‘1~2p’ test.txt输出第一行,步长2,输出文档中的奇数行
2~2psed -n ‘2~2p’ test.txt输出第二行,步长为2,输出文档中的偶数行
/正则/psed -n ‘/^【0-9】/p’ test.txt输出以数字开头的行
$=sed -n ‘$=’ test.txt输出文档的行数

命令d 删除

命令完整示例说明
2dsed ‘2d’ test.txt删除test.txt 文档中的第二行
2,5dsed ‘2,5d’ test.txt删除test.txt文档中的第二行至第五行的内容
2,+5dsed ‘2,+5d’ test.txt删除test.txt文档中的第二行以及后面的五行内容
$dsed ‘$d’ test.txt删除test.txt文档中的最后一行
/正则/sed ‘/^【0-9】/d’ test.txt删除test.txt 文档中以数字开头的行
//!dsed ‘/^【0-9】/d’ test.txt删除test.txt 文档中非数字开头的行
^$sed ‘^$’ test.txt删除test.txt 文档中的空行

命令s替换

命令完整示例说明
s#old#new#sed ‘s#old#new#’ test.txt将test.txt文档中每行中的第一个old字符替换成new
s#old#new#2sed ‘s#old#new#2’ test.txt将test.txt文档中每行中的第二个old字符替换成new
s#old#new#gsed ‘s#old#new#g’ test.txt将test.txt文档中每个old字符替换成new
s#old##sed ‘s#old##’ test.txt将test.txt文档中每行中的第一个old字段替换为空也既是删掉
s#henan#&s#sed ‘s#henan#&s#’ test.txt将test.txt 文档中的每一行中的第一个henan替换成henans 其中&代表匹配的字符
4,7s/^/#/sed ‘4,7s/^/#/’ test.txt将test.txt 文档中的第4行至第7行注释掉
4,7s/^/#/sed ‘4,7s/^#henan/henan/’ test.txt将test.txt 文档中的第4行至第7行中以henan开头的行取消注释

cai插入

命令形式完整示例说明
行号ised ‘2i 123’ test.txt将123插入test.txt 文档中的第二行前面
正则ised ‘/^【0-9】/i 123’ test.txt将123插入到test.txt 文档中以数字开头的行前面
正则ised ‘/^102/i123’ test.txt将123插入到test.txt 文档中以数字102开头的行前面
a在行后面插入命令格式和i相同
c替换改行命令格式和i相同
$ased '$a test ’ test.txt向文档test.txt 最后一行追加一行内容为test
行号ased ‘11a 112,henan,UFO’ test.txt在test.txt 文档中,向第11行后面追加一行

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值