linux之sed命令

一、sed的常用功能

1、处理文本文件

2、分析日志文件

3、修改配置文件//

二、sed的原则

1、sed一次处理一行内容

2、sed不改变文件内容,除非重定向或-i参数

3、sed可以对所有行进行操作,也可以根据正则选择选定行

三、sed的格式

1、命令行模式

sed [options] 'command' file

options:-e,-n,-i

command:行定位(正则)+sed命令(操作)

2、脚本格式

sed -f scriptfile file

3、常见的命令

p命令:输出命令  ,打印命令

sed 'p' passwd   打印内容两行

sed -n 'p'  passwd  -n忽略默认输出,解决上述问题

行定位:

nl命令

nl  passwd  | sed -n '10p'   忽略空白行不显示行号

nl -b a passwd  | sed -n '10p'  不忽略空白行,假如第十行是空白,也会输出空白行的行号10

nl -b a passwd  | sed -n '6,10p'   6到10行

正则

sed -n '/besttest/p'  passwd  定位到 besttesth这行

nl -b a passwd  | sed -n '/mail/,/besttest/p'  从mail到besttest这一行

nl -b a passwd  | sed -n '16,/besttest/p'   从16行到besttest这一行

除去这几行

nl -b a passwd  | sed -n '16!p'     不要16这一行

nl -b a passwd  | sed -n '6,10!p'  不要6到10这几行

间隔几行

nl -b a passwd  | sed -n '1~2p'    数字一代表从第1行开始,2代表每隔两行打印一次。

4、基本操作命令

a  新增行 在行后

nl -b a passwd | sed '12a=======' 12行后面

nl -b a passwd | sed '1,5a======='  在1到5行后面都增加,多行情况

i 插入行 在行前

nl -b a passwd | sed '12i========' 12行前面

c  替换行

nl -b a passwd | sed '5c=======' 第5行替换为========

nl -b a passwd | sed '2,5c======='  第2到5行都替换为========

d  删除行

nl -b a passwd | sed '2d' 删除第2行

nl -b a pawwwd | sed '1,5d' 删除第1到5行,多行情况

s  替换

sed  's/old/new/'   profile   把old替换为new     以/为分隔符

sed 's/:/%/g'  profile    这里g是全局替换的意思,文件中的:都替换为%

#案例:获取eth0中的ip地址

ifconfig | sed -n '/inet.*Bcast/p' | sed 's/ine.*r:/ /'  |  sed 's/\sBcast:.*/ /'

几种方法

 

 

#案例,修改配置文件 在/etc/profile中添加环境变量

如何定位最后一行

sed '$a\        export TOMCAT_HOME=XXXX\n       export  PATH=$PATH:$TOMCAT_HOME'  profile 

使用\来家空格符

sed命令,默认不修改源文件,两种修改的方法:

@重定向

sed '$a\        export TOMCAT_HOME=XXXX\n       export  PATH=$PATH:$TOMCAT_HOME'  profile >> profile 此时追加了profile文件的内容,输出了两次

如何解决,加-n 

sed  -n   '$a\        export TOMCAT_HOME=XXXX\n       export  PATH=$PATH:$TOMCAT_HOME'  profile >> profile

@加-i 参数

sed  -i   '$a\        export TOMCAT_HOME=XXXX\n       export  PATH=$PATH:$TOMCAT_HOME'  profile 

 

#案例 删除配置文件里的空白行

sed '/^$/d' file

#案例 服务器中日志处理-服务器log中打印error信息

sed -n '/error/p'  file

 

#多个sed命令用{}括起来,命令之间用;隔开。

nl passwd | sed '{10,20d;s/false/true/}'

#n 读取下一个输入行(用下一个命令处理)

nl -b a passwd | sed -n  '{n;p;}'   >>前一行不取,取第二行>>   nl -b a passwd | sed -n  '{2~2p}' 

nl -b a passwd | sed -n  '{n;n;p;}'   >>前两行不取,取第三行>>nl -b a passwd | sed -n  '{3~3p}'  都可以用步进实现

 

#& 替换固定的字符串

配合替换操作使用

将passwd中的用户名后面添加空格

sed 's/^[a-z_-]\+/&  ' passwd

 

#对用户名的首字母转换为大写

\u \l:对首字母转大写或小写

\U \L :对一串字符大写或小写

sed 's/^[a-z_-]\+/\u&  ' passwd

 

#将所有的 txt文件名转化为大写

ls | sed 's/.*/\U&/'   

 

#() 

\( \):括号需要转义,

替换某种部分字符串(\1,\2)

sed  's/w1\(w2\)\(w3\)/\1\2/'  匹配前两个正则表达式的内容 输入w2w3

获取eth0的ip

ifconfig 本机 | sed -n '/inet .*Bca/p' | sed 's/inet.*r:\([0-9.]\+\).\+Bcast.*$/\1/'

 

#获取passwd 中的用户名 uid 和gid

sed 's/\(^[a-z_-]\+\):x:\([0-9]\+\):.*$ /\1,\3/'

 

#r:读取指定文件插入到匹配行

sed '1r 123.txt'  abc.txt  把123.txt里的数据插入到abc.txt里的第一行之后

读不会更改文件内容

#w:复制匹配行拷贝指定文件

sed '1w 123.txt'   abc.txt   复制abc.txt的内容到123.txt的第一行之后

写操作会修改目标文件

 

#q 退出sed,使用q可以提前退出sed

nl passwd | sed '10q'

 

#-e:可以执行多次sed命令

nl -b a passwd | sed -e '10,20d'  -e   's/:/%/'

#-i:可以修改文件的内容

 

posted @   朱砂痣  阅读(169)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示