sed命令

sed命令

sed命令语法

sed命令语法如下:

sed   选项   '命令部分'  文件

常见的选项如下:

  • -n : 只打印被sed处理的行,默认是处理后的结果,经常与p搭配。

  • -i : 默认情况下,会将待处理的文件内容拷贝到缓存中,处理之后输出到屏幕上,此时无论是删除,还是查找替换,都对源文件的内容没有任何影响。-i 选项直接修改原文件,而不在屏幕上输出。这种无损操作可以提前测试查找替换的结果,避免产生不可逆的修改。
    sed最重要的是命令部分,命令部分又分为三个小部分:找到匹配的行、具体操作、可选的新增内容

找到匹配的行

要确定哪些行被找到,有两种方式:

  • 直接指定行,使用n1,n2表示第n1行到第n2行,不指定就是所有行被找到。

  • 基于内容的查找,使用 /text/ 去查找text文本,支持正则表达式。通过这两种方式找到的行,进入下一步等待操作。

上一部通过直接指定或查找的方式找到了待操作的行,这一步就要指定基于行的具体的操作,具体操作分为两大类:基于整行的操作、基于字符的操作。

基于整行的操作又分为打印、删除、追加、替换、插入。

基于整行的打印

打印操作符是p,为了只打印需要的行,需要加上-n选项,否则会重复输出需要的行。

例如,打印前5行:

sed  -n 1,5p file.txt 

打印所有行:

sed -n p file  # 打印所有行

打印包含“word”文本的行:

sed -n /word/p  

打印前5行中包含“word”文本的行:

sed -n 1,5/word/p file.txt  

基于整行的删除

删除的操作符是d,在匹配到行之后,使用如下操作删除:

sed  1,3d  file.txt    

这行命令删除了前3行。

或者使用:

sed  /text/d  file.txt

这行命令将包含有“text”文本的行删除。

基于整行的追加、插入和替换

基于整行的追加、插入、替换的指令分别是a、i、c。例如:

要在第一行前面加入新文本内容,运行:

sed  "1i new text" file.txt

要在最后一行后面追加新内容,运行:

sed  "$a  new text" file.txt

这里$表示最后一行。

而要将第3行整行换成新内容,运行:

sed  "3c   new text "  file.txt

注意,由于后面的文本中出现了空格,故而上面这三个操作都是需要添加引号的,否则会被识别为命令行参数。

前面提到的替换操作是整行替换,sed还可以基于字符替换。

基于字符的查找替换

基于字符的查找替换是sed最常见的操作。在找到行之后,使用s/旧文本/新文本/g 以执行基于字符的替换操作。这里的g表示行内全局替换,否则只替换找到的每行的第一个。例如:

sed s/old/new/g file.txt  

上面这行命令将所有old文本替换成new文本。

sed 1,5s/old/new/gi file.txt 

上面这行命令将前5行的old文本替换成new文本,且忽略大小写。

值得提醒的的是,一般情况下使用 s/旧文本/新文本/g 进行替换,但这里的/可以换成其它字符,如果遇到文本中本来就包含/的情况,可以使用转义符号\转义,不过更加建议更换成其它字符,比如*

例如,更换apt包管理器的软件仓库地址,以提升下载速度,而仓库地址包含/字符,此时,就可以使用:

sed  -i  s*http://archive.ubuntu.com/ubuntu/*https://mirrors.aliyun.com/ubuntu/*g   /etc/apt/sources.list

这里我们使用了*进行分隔。注意加-i 将修改应用到源文件。

sed配合管道、重定向

sed可以配合管道使用:

nl file.txt | sed -n 1,5p

上面这行命令先显示文件的行号,然后打印前5行。

重定向的意思是把本来要输出到屏幕上的内容复制到新文件中,例如:

sed -n 1,5p file.txt > new.txt

上面这行命令将文件的前5行复制到new.txt中。

再比如:

sed -n /文本/p 文件 > new.txt

这行命令将文件中包含word文本的那些行复制到new.txt中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值