sed 显示文件行号内容的用法
[root@oldboy02 ~]# cat >person.txt<<EOF
> 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,C00
> 104,yy,CFO
> 105,feixue,CTO
> EOF
root@oldboy02 ~]# mkdir -p /oldboy
[root@oldboy02 oldboy]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '1p' person.txt 显示所有内容
101,oldboy,CEO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
1.显示某一行,-n 取消默认输出
[root@oldboy02 oldboy]# sed -n '1p' person.txt
101,oldboy,CEO
[root@oldboy02 oldboy]# sed -n '3p' person.txt
103,Alex,C00
2.显示连续多行的内容,表示显示行的范围包含首位行
[root@oldboy02 oldboy]# sed -n '1,2p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
[root@oldboy02 oldboy]# sed -n '2,5p' person.txt(注意,2,5 表示的是连续的2,3,4,5行内容强调的是连续性)
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
3.显示文件中包行oldboy的行
[root@oldboy02 oldboy]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
[root@oldboy02 oldboy]# grep 'oldboy' person.txt
4.显示文件中包行oldboy的行到包含104的行。
[root@oldboy02 oldboy]# sed -n '/oldboy/,/^104/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
[root@oldboy02 oldboy]# grep '^104' person.txt9(grep查找的时候不能显示范围)
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '/^104/p' person.txt (^括号表示更精确一点)
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '/^101/,/^105/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
5.查找多个条件的方法
[root@oldboy02 oldboy]# egrep 'oldboy|yy' person.txt
101,oldboy,CEO
104,yy,CFO
[root@oldboy02 oldboy]# sed -rn '/oldboy|yy/p' person.txt (-rn -r 表示查找多个条件的内容)
101,oldboy,CEO
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '1p;3p;5p' person.txt ( ;号表示中间不是连续行的内容)
101,oldboy,CEO
103,Alex,C00
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '/oldboy/p;/yy/p;/feixue/p' person.txt (显示多行不连续文件的内容)
101,oldboy,CEO
104,yy,CFO
105,feixue,CTO
sed 查询的时候都是结合p (preint) 一起来使用
[root@oldboy02 oldboy]# sed '3a yangjuncheng' person.txt (3 表示第三行 a表示增加 3a表示在第三行的后面添加一行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
yangjuncheng
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '3i aaaaaaaaa' person.txt (i 表示在前面插入内容,如果要写入文件是在sed后面加入i,将添加的内容写到文件中)
101,oldboy,CEO
102,zhangyao,CTO
aaaaaaaaa
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '$p' person.txt ($p 表示最后一行)
105,feixue,CTO
[root@oldboy02 oldboy]# sed '$a new,new,new' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
[root@oldboy02 oldboy]# sed '$a new,new,new\nold,old,old' person.txt(文件的最后一行/n 表示在后面增加多行的内容)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
old,old,old
[root@oldboy02 oldboy]# sed -i '$a new,new,new\nold,old,old' person.txt (-i 表示写入文件内容中)
[root@oldboy02 oldboy]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
old,old,old
cat >>person.txt <<EOF (在一个文件最后一行添加多行的方法)
wwwww
cccccccc
dddddddd
QQQQQQ
WWWWW
yang jun cheng
wang bing bing
[root@oldboy02 oldboy]# echo test test >>person.txt (如果在文件的最后面追加的文件内容不是很多的时候用echo就行,如果多行就用cat 方法)
[root@oldboy02 oldboy]# cat person.txt
yang jun cheng
wang bing bing
li qang
test test
[root@oldboy02 oldboy]# sed '$d' persion.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
[root@oldboy02 oldboy]# sed '2,3d' persion.txt (删除2到3行)
101,oldboy,CEO
104,yy,CFO
105,feixue,CTO
企业案例:不显示文件的空行
[root@oldboy02 oldboy]# cat -n persion.txt
1 101,oldboy,CEO
2
3 102,zhangyao,CTO
4
5 103,Alex,C00
6
7 104,yy,CFO
8
9 105,feixue,CTO
[root@oldboy02 oldboy]# cat -A persion.txt (-A 表示不带空格的行)
101,oldboy,CEO$
$
102,zhangyao,CTO$
$
103,Alex,C00$
$
104,yy,CFO$
$
[root@oldboy02 oldboy]# grep -v '^$' persion.txt (过滤掉空行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# egrep -v '^$' persion.txt(过滤掉空行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '/^$/d' persion.txt (删除空行的方法,如果要写入文件加 -i )
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '/^$/p' persion.txt (显示文件的空行)
[root@oldboy02 oldboy]# sed -n '/^$/!p' persion.txt (排除空行方法)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# awk '!/^$/' persion.txt (排除空行的方法)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
变量引用
[root@oldboy02 oldboy]# x=oldboy
[root@oldboy02 oldboy]# y=oldgirl
[root@oldboy02 oldboy]# sed "s#$x#$y#g" persion.txt (这里变量的引用必须要用双引号才行,单引号识别不出来)
101,oldgirl,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed "s#oldboy#oldgirl#g" persion.txt
101,oldgirl,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 ~]# cat >person.txt<<EOF
> 101,oldboy,CEO
> 102,zhangyao,CTO
> 103,Alex,C00
> 104,yy,CFO
> 105,feixue,CTO
> EOF
root@oldboy02 ~]# mkdir -p /oldboy
[root@oldboy02 oldboy]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '1p' person.txt 显示所有内容
101,oldboy,CEO
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
1.显示某一行,-n 取消默认输出
[root@oldboy02 oldboy]# sed -n '1p' person.txt
101,oldboy,CEO
[root@oldboy02 oldboy]# sed -n '3p' person.txt
103,Alex,C00
2.显示连续多行的内容,表示显示行的范围包含首位行
[root@oldboy02 oldboy]# sed -n '1,2p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
[root@oldboy02 oldboy]# sed -n '2,5p' person.txt(注意,2,5 表示的是连续的2,3,4,5行内容强调的是连续性)
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
3.显示文件中包行oldboy的行
[root@oldboy02 oldboy]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
[root@oldboy02 oldboy]# grep 'oldboy' person.txt
4.显示文件中包行oldboy的行到包含104的行。
[root@oldboy02 oldboy]# sed -n '/oldboy/,/^104/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
[root@oldboy02 oldboy]# grep '^104' person.txt9(grep查找的时候不能显示范围)
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '/^104/p' person.txt (^括号表示更精确一点)
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '/^101/,/^105/p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
5.查找多个条件的方法
[root@oldboy02 oldboy]# egrep 'oldboy|yy' person.txt
101,oldboy,CEO
104,yy,CFO
[root@oldboy02 oldboy]# sed -rn '/oldboy|yy/p' person.txt (-rn -r 表示查找多个条件的内容)
101,oldboy,CEO
104,yy,CFO
[root@oldboy02 oldboy]# sed -n '1p;3p;5p' person.txt ( ;号表示中间不是连续行的内容)
101,oldboy,CEO
103,Alex,C00
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '/oldboy/p;/yy/p;/feixue/p' person.txt (显示多行不连续文件的内容)
101,oldboy,CEO
104,yy,CFO
105,feixue,CTO
sed 查询的时候都是结合p (preint) 一起来使用
[root@oldboy02 oldboy]# sed '3a yangjuncheng' person.txt (3 表示第三行 a表示增加 3a表示在第三行的后面添加一行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
yangjuncheng
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '3i aaaaaaaaa' person.txt (i 表示在前面插入内容,如果要写入文件是在sed后面加入i,将添加的内容写到文件中)
101,oldboy,CEO
102,zhangyao,CTO
aaaaaaaaa
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '$p' person.txt ($p 表示最后一行)
105,feixue,CTO
[root@oldboy02 oldboy]# sed '$a new,new,new' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
[root@oldboy02 oldboy]# sed '$a new,new,new\nold,old,old' person.txt(文件的最后一行/n 表示在后面增加多行的内容)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
old,old,old
[root@oldboy02 oldboy]# sed -i '$a new,new,new\nold,old,old' person.txt (-i 表示写入文件内容中)
[root@oldboy02 oldboy]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
old,old,old
cat >>person.txt <<EOF (在一个文件最后一行添加多行的方法)
wwwww
cccccccc
dddddddd
QQQQQQ
WWWWW
yang jun cheng
wang bing bing
[root@oldboy02 oldboy]# echo test test >>person.txt (如果在文件的最后面追加的文件内容不是很多的时候用echo就行,如果多行就用cat 方法)
[root@oldboy02 oldboy]# cat person.txt
yang jun cheng
wang bing bing
li qang
test test
[root@oldboy02 oldboy]# sed '$d' persion.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
new,new,new
[root@oldboy02 oldboy]# sed '2,3d' persion.txt (删除2到3行)
101,oldboy,CEO
104,yy,CFO
105,feixue,CTO
企业案例:不显示文件的空行
[root@oldboy02 oldboy]# cat -n persion.txt
1 101,oldboy,CEO
2
3 102,zhangyao,CTO
4
5 103,Alex,C00
6
7 104,yy,CFO
8
9 105,feixue,CTO
[root@oldboy02 oldboy]# cat -A persion.txt (-A 表示不带空格的行)
101,oldboy,CEO$
$
102,zhangyao,CTO$
$
103,Alex,C00$
$
104,yy,CFO$
$
[root@oldboy02 oldboy]# grep -v '^$' persion.txt (过滤掉空行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# egrep -v '^$' persion.txt(过滤掉空行)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed '/^$/d' persion.txt (删除空行的方法,如果要写入文件加 -i )
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed -n '/^$/p' persion.txt (显示文件的空行)
[root@oldboy02 oldboy]# sed -n '/^$/!p' persion.txt (排除空行方法)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# awk '!/^$/' persion.txt (排除空行的方法)
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
变量引用
[root@oldboy02 oldboy]# x=oldboy
[root@oldboy02 oldboy]# y=oldgirl
[root@oldboy02 oldboy]# sed "s#$x#$y#g" persion.txt (这里变量的引用必须要用双引号才行,单引号识别不出来)
101,oldgirl,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO
[root@oldboy02 oldboy]# sed "s#oldboy#oldgirl#g" persion.txt
101,oldgirl,CEO
102,zhangyao,CTO
103,Alex,C00
104,yy,CFO
105,feixue,CTO