linux常用命令sed
来源:互联网 发布:单页商城源码 编辑:程序博客网 时间:2024/06/14 12:55
linux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。
sed命令的语法格式:
sed的命令格式: sed [option] 'sed command' filename
sed的脚本格式:sed [option] -f 'sed script' filename
sed脚本文件 [option] 输入文件 第一行具有sed命令解释器的sed脚本文件
-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如
sed -f myscript.sed input_file 这里myscript.sed即为支持sed命令的文件
-r :支持扩展表达式
-i :直接修改文件内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
举例:(假设我们有一文件名为ab)
删除某行
[root@localhost ruby] # sed '1d' ab #删除第一行
[root@localhost ruby] # sed '$d' ab #删除最后一行
[root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行
[root@localhost ruby] # sed '2,$d' ab #删除第二行到最后一行
显示某行
. [root@localhost ruby] # sed -n '1p' ab #显示第一行
[root@localhost ruby] # sed -n '$p' ab #显示最后一行
[root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行
[root@localhost ruby] # sed -n '2,$p' ab #显示第二行到最后一行
使用模式进行查询
[root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
[root@localhost ruby] # sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
增加一行或多行字符串
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
[root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
代替一行或多行
[root@localhost ruby] # sed '1c Hi' ab #第一行代替为Hi
Hi
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed '1,2c Hi' ab #第一行到第二行代替为Hi
Hi
end
替换一行中的某部分
格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)
[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替换ruby为bird
[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g' #删除ruby
插入
[root@localhost ruby] # sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
bye
删除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
替换匹配行中的某个字符串
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
使用sed在文本中定位文本的方式:
x x为一行号,比如1
x,y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/ 查询包含两个模式的行,如/disk/disks/
/pattern/,x 在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/ 通过行号和模式查询匹配行,如 3,/disk/
x,y! 查询不包含指定行号x和y的行
基本sed编辑命令:
p 打印匹配行 c/ 用新文本替换定位文本
= 显示文件行号 s 使用替换模式替换相应模式
a/ 在定位行号后附加新文本信息 r 从另一个文本中读文本
i/ 在定位行号后插入新文本信息 w 写文本到一个文件
d 删除定位行 q 第一个模式匹配完成后退出或立即退出
l 显示与八进制ASCII代码等价的控制字符 y 传送字符
n 从另一个文本中读文本下一行,并附加在下一行 {} 在定位行执行的命令组
g 将模式2粘贴到/pattern n/
- #######sed的匹配模式支持正则表达式#####################
- sed'5 q'/etc/passwd#打印前5行
- sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行
- sed-n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符
- sed-n '/o*/p'/etc/passwd#打印o字符重复任意次
- sed-n '/o\{1,\}/p'/etc/passwd#打印o字重复出现一次以上
- sed-n '/o\{1,3\}/p'/etc/passwd#打印o字重复出现一次到三次之间以上
- [root@jie1 ~]# sed -i '/DEVICE/c\Ethernet' test
- #匹配DEVICE的行,替换成Ethernet这行
- [root@jie1 ~]# sed -i 's/static/dhcp/' test
- #把static替换成dhcp(/,@,#都是前面所说的地址定界符)
- [root@jie1 ~]# sed -i '/IPADDR/s@22\.1@10.12@' test
- #匹配IPADDR的行,把22.1替换成10.12由于.号有特殊意义所有需要转义
- [root@jie1 ~]# sed -i '/connect/s#YES#NO#' test
- #匹配connect的行,把YES替换成NO
- [root@jie1 ~]# sed -i 's/bin/tom/2g' test
- #把所有匹配到bin的行中第二次及第二次之后出现bin替换成tom
- [root@jie1 ~]# sed -i 's/daemon/jerry/2p' test
- #把所有匹配到bin的行中第二次出现的daemon替换成jerry,并在生产与匹配行同样的行
- [root@jie1 ~]# sed -i 's/adm/boss/2' test
- #把所有匹配到adm的行中仅仅只是第二次出现的adm替换成boss
- [root@jie1 ~]# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test
- #匹配root的行,把bash替换成nologin,且把0替换成1
- [root@jie1 ~]# sed -i 's/root/(&)/g' test
- #把root用括号括起来,&表示引用前面匹配的字符
- [root@jie1 ~]# sed -i 's/BOOTPROTO/#BOOTPROTO/' test
- #匹配BOOTPROTO替换成#BOOTPROTO,在配置文件中一般用于注释某行
- [root@jie1 ~]# sed -i 's/ONBOOT/#&/' test
- #匹配ONBOOT的行的前面添加#号,在配置文件中也表示注释某行
- [root@jie1 ~]# sed -i '/ONBOOT/s/#//' test
- #匹配ONBOOT的行,把#替换成空,即去掉#号,也一般用作去掉#注释
- #================执行以上sed命令之后文件显示的内容====================
sed引用变量:(在自动化shell脚本 中也经常会使用到变量)
第一种当sed命令里面没有默认的变量时可以把单引号改成双引号;
第二种当sed命令里面有默认的变量时,那自己定义的变量需要加单引号,且sed里面的语句必须用单引
- [root@jie1 ~]# cat >> myfile << EOF
- > hello world
- > i am jie
- > how are you
- > EOF #先生成一个文件
- [root@jie1 ~]# cat myfile
- hello world
- i am jie
- how are you
- [root@jie1 ~]# name=li
- #定义一个变量,且给变量赋值
- [root@jie1 ~]# sed -i "s/jie/$name/" myfile
- #把匹配jie的字符替换成变量的值
- [root@jie1 ~]# cat myfile
- hello world
- i am li
- how are you
- [root@jie1 ~]# sed -i "$a $name" myfile
- #当sed命令也有默认变量时,在去引用自己定义的变量会出现语法错误
- sed: -e expression #1, char 3: extra characters after command
- [root@jie1 ~]# sed -i '$a '$name'' myfile
- #在引用自定义的变量时,sed语句必须用单引引住,然后把自定义的变量也用单引号引住
- [root@jie1 ~]# cat myfile
- hello world
- i am li
- how are you
- li
- [root@jie1 ~]#
http://www.cnblogs.com/ctaixw/p/5860221.html
- linux sed 常用命令学习
- Linux常用命令之sed
- linux常用命令sed
- Linux常用命令sed
- linux --常用命令 sed
- AWK SED 与 LINUX常用命令
- linux常用命令之sed,sort
- linux常用命令学习之sed命令
- linux常用命令——sed命令详解
- Linux常用命令笔记-ftp/sed/awk
- linux常用命令之 sed grep awk
- sed常用命令
- sed 常用命令
- Sed 常用命令
- sed常用命令
- sed常用命令
- sed常用命令
- sed 常用命令
- window实验
- sdutacm-顺序表应用2:多余元素删除之建表算法
- 各种数据源的ConnectString【转】
- Solution for link error:Cannot Open File 'python27_d.lib'
- 设计模式 策略模式 以角色游戏为背景
- linux常用命令sed
- 设计模式——简单工厂模式分析
- Beautiful Soup
- UIViewController 相关生命周期总结 和 UIView 总结
- 主成分分析(PCA)
- 通俗理解卷积神经网络
- 如何从零开始搭建一套web集成测试环境
- 王垠:谈 Linux,Windows 和 Mac
- leetcode485 Max Consecutive Ones Java