Linux sed 简单操作

 

 

一、sed简介

sed是一种在线的编译器,它一次处理一行内容,将内容存储在临时的缓冲区中,接着用sed命令处理缓冲区的内容,处理完后将缓冲区的内容送往屏幕。(默认不更改原文件内容,除非使用重定向存储输出)
 
二、sed使用参数
格式:[root@www ~]# sed  [-nefr]  [动作]
选项与参数:
-n :使用安静(silent)模式。取消默认原有输出,只显示特殊处理的内容。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
 
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
 
function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
 
 
 
############################sed练习##################################
sed练习案例
1、将/etc/passwd的内容以行号列出来,并将2-35行内容删除
[root@localhost ~]# nl /etc/passwd | sed '2,35d'     

注意:原文件内容并没有删除,只是显示的时候删除了2-35行内容

 
2、在第二行后面添加 "I am studing linux"[在第三行显示]
[root@localhost ~]# nl /etc/passwd | sed '2a I am studing linux'
a  (add)新增一行, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
注意:如果添加多行,则需要在命令的结尾打上\,然后按住ctrl+回车 换行输入
 
[root@localhost ~]# nl /etc/passwd | sed '2a I am studing linux\
drink beer?'

 

3、以行单位替换显示:将2-35行的内容替换成“NO number 2-35”显示
[root@localhost ~]# nl /etc/passwd | sed '2,35c NO number 2-35' 
c (change),替换显示
 
4、寻找数据并显示   从/etc/passwd文件中查找出root,并只显示root所在行
[root@localhost ~]# nl /etc/passwd | sed -n '/root/p'

 

5、数据搜索并执行命令
 搜索/etc/passwd,找到root对应的行,把bash替换为blueshell,再输出这行 。【执行后面花括号中的一组命令,每个命令之间用分号隔开】
[root@localhost ~]#  nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
如果只替换第一个关键字就退出可在后面添加;q
 
6、数据搜索替换
格式:sed ‘s#XXX#MMM#g’ 文件
[root@localhost ~]# sed -n 's#oldboy#network#gp' test.txt

sed -r 's#(.*) cisco#\1#g' test.txt

-r 代表进行正则表达式批评
(.*) cisco 代表任意内容并以cisco结尾的关键字
\1 取出正则表达式中第一个()里面代表的内容
 
7.只查看wen.txt文件(100行)内的第20-30行
① sed -n '20,30p' wen.txt  ----最简单快捷的方式

②head -30 wen.txt|tail -11 ----效率最低,尽量不用

head -n 取出文件的前n行,默认是前10行,例如取前3行则是 head -3
tail -n 取出文件的后n 行,默认是后10行,例如取出后11行,则是 tail -11
【tail -f  文件名 】可以跟踪文件尾部的变化,tail -f 可以简写为tailf 

 

③  awk '{if(NR>19&&NR<31) printf $1"\n"}' wen.txt 
     awk '{if(NR>19&&NR<31) print $1}' wen.txt 

注意:如果采用关键字printf则默认情况下是没有换行的,必须在后面加“\n”,如果是采用print,则默认情况下是有换行,无需加“\n”

posted @ 2017-04-09 22:19  漫舞沧海  阅读(144)  评论(0编辑  收藏  举报