Linux sed 命令

sed是一个流编辑器(stream editor),它适合将一系列编辑命令作用于文本文件,sed大概有以下用法

格式:

1在shell中调用sed [选项] ‘sed命令’ 输入文件

2将sed命令插入到脚本后,通过sed命调用它,其实就是把引号中的内容写到一个文本文件中

3独立作为脚本文件sed脚本需要一sha-bang文件开头,即第一行为#!/bin/sed –f

Sed有命令和编辑命令。

命令

-n 不打印所有的行的标准输出(只输出选定的行,也可能是内容,也可能是行号,具体要看编辑命令

-e表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e可以省略

-f表示正在调用sed脚本文件

-i :可以直接操作原文件。默认情况下sed不会改变原文件,但是-i选项可以修改原文件,此选项应慎用。

-r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式

Sed编辑命:

P/p打印匹配行

=打印文件行号

a\在定位行号之前插入信息

i\在定位行号之后插入信息

d删除定位行

c\用新文本替代定位文本

s使用替换模式替换相应模式

sed 's#My#Your#g' datafile
#紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。

y命令  该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。

r从另一个文件中都文本

w将文本写入到一个文件

{}在定位行执行的命令组

n读取下一个输入行,用下一个命令处理新的行

g将保存到缓冲区的内容复制到模式缓冲区


还有h H x G命令。。。。。

例1 删除2-5行

 nl /etc/passwd | sed '2,5d'

例2 这样就能把包含704的行号和内容都打印出来

sed -n -e'/704/p' -e '/704/=' filename

例3 显示1-3行

sed '3q' filename

例4 显示3到最后一行

sed -n '3,$p' filename

例5 不包含abc,将123改为456

sed '/abc/!s/123/456/g' urfile 

当为g时,每一行中的所有匹配值全部替换,没有g时,默认替换每行中的第一个

例6 删除包含"My"的行到包含"You"的行之间的行

sed '/My/,/You/d' datafile

例7 交换匹配顺序

sed 's/\(12\)\(.*\)\(56\)/\3\2\1/g' filename

将每行中12,56字符前后位置替换:如 123456 变为563412

sed 正则表达式


 

元字符

 功能

 示例

 ^

 行首定位符

 /^my/  匹配所有以my开头的行

 $

 行尾定位符

 /my$/  匹配所有以my结尾的行

 .

 匹配除换行符以外的单个字符

 /m..y/  匹配包含字母m,后跟两个任意字符,再跟字母y的行

 *

 匹配零个或多个前导字符

 /my*/  匹配包含字母m,后跟零个或多个y字母的行

 []

 匹配指定字符组内的任一字符

 /[Mm]y/  匹配包含My或my的行

 [^]

 匹配不在指定字符组内的任一字符

 /[^Mm]y/  匹配包含y,但y之前的那个字符不是M或m的行

 \(..\)

 保存已匹配的字符

 1,20s/\(you\)self/\1r/  标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第 20行进行处理,you被保存为标签1,如果发现youself,则替换为your。

 &

 保存查找串以便在替换my中引用

 s/my/**&**/  符号&代表查找串。my将被替换为**my**

 \<

 词首定位符

 /\<my/  匹配包含以my开头的单词的行

 \>

 词尾定位符

 /my\>/  匹配包含以my结尾的单词的行

 x\{m\}

 连续m个x

 /9\{5\}/ 匹配包含连续5个9的行

 x\{m,\}

 至少m个x

 /9\{5,\}/  匹配包含至少连续5个9的行

 x\{m,n\}

 至少m个,但不超过n个x

 /9\{5,7\}/  匹配包含连续5到7个9的行


sed 高级用法

。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值