Linux sed命令

sed命令

linux sed命令是利用脚本来处理文本文件。是一款流编辑工具,用来对文本进行过滤与替换操作

sed可依照脚本的指令来处理、编辑文本文件。

sed主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法

sed [-hnV][-e<脚本>][-f<脚本文件>][文本文件]

参数说明
  • -e<脚本>或–expression=<脚本> 以选项中指定的script来处理输入的文本文件。
  • -f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • -h或–help 显示帮助。
  • -n或–quiet或–silent 仅显示script处理后的结果。
  • -V或–version 显示版本信息。
动作说明
  • a:新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)。
  • c:取代,c的后面可以接字符,这些字串可以取代n1,n2之间的行!
  • d:删除,删除的时候不接任何字符。
  • i:插入,i的后面可以接字符,而这些字串会在新的一行出现(目前的上一行)。
  • p:打印,将某个选择的数据印出。通常p会参与sed -n一起运行。
  • s: 取代,可以直接进行取代的工作,通常这个动作可以搭配正则表达式。示例如下:
  • r:在脚本指令中使用扩展正则表达式
//以行为单位进行新增/删除
//在testfile的第四行后添加一行,并将结果输出到标准输出
sed -e 4a\newLine testfile
//将/etc/passed的内容列出并且列印行号,同时,将2~5行删除
nl /etc/passwd | sed '2,5d'
//增加两行,在第二行后面加入两行字,例如Drink tea or ... 与 drink beer?
nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'

sed后面接的动作,一定要使用“两个单引号括住”

//以行为单位的替换和显示
//将2~5行的内容取代为[No 2-5 number]
nl /etc/passwd | sed '2,5c No 2-5 number'
//仅列出/etc/passwd文件内的第5~7行
nl /etc/passwd | sed -n '5,7p'

可以透过这个sed的以行为单位的显示功能,就能够将某一个文件内的某些行号选择出来显示。

//数据的搜索并显示
//搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed '/root/p'
//如果root找到,除了输出所有行,还会输出匹配行。使用-n的时候将只会打印包含模板的行
nl /etc/passwd | sed -n '/root/p'
//数据的搜索与删除
//删除/etc/passwd所有包含root的行,其他行输出
nl /etc/passwd | sed  '/root/d'

还可以使用组合命令操作

//数据的搜寻并执行命令
//搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号隔开,这里把bash替换成blueshell,再输出这行,最后退出:
nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
//数据的搜寻并替换
//除了整行模式之外,sed还可以用行为单位进行部分数据的搜寻并取代。
sed 's/要被取代的字串/新的字串/g'
//多点组合编辑
//一条sed命令,删除/etc/passwd第三行到末尾的数据,并将bash替换成blueshell
nl /etc/passed | sed -e '3,$d' -e 's/bash/blueshell/'
//-e表示多点编辑

sed的-i选项可以直接修改文件内容,这功能非常有帮助!sed通常与正则表达式一起使用,所以需要熟悉正则表达式的语法规则。

操作地址匹配规范

使用sed编写脚本指令需要指定一个地址来决定操作范围,如果不指定,则默认对文件的所有行进行操作。Sed命令可以使用以下方式确定需要操作地址的范围:

  • -number 指定输入文件的唯一行号
  • first~step 指定以first开始,并指定操作步长为step,如2~5:指定第二行开始,每5行匹配一次操作地址。
  • $ 匹配文件的最后一行
  • /regexp/ 中间包含的是正则表达式,通过正则表达式匹配操作地址。如果//中正则表达式为空,匹配最近一次正则表达式的匹配地址。
  • \cregexpc \c和c之间匹配正则表达式,c字符可以使用任意字符代替
  • addr1,addr2 匹配从操作地址1到操作地址2的所有行
  • addr1, +N 匹配地址1以及后面的N行内容
部分指令详解
  • 替换指令(s):【addr】s/pattern/replace/flags
  • 删除指令(d):需要注意,删除时是删除整行,而不只是删除匹配的内容(如果删除匹配的内容,可以使用替换)
  • 转换指令(y):【addr】y/sources-chars/dest-chars,其中,【addr】用来定位需要修改的行,source-chars为需要被修改的字符,dest-chars为准备替换的字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值