【Linux】三剑客命令之sed命令的常见用法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Linux三剑客指的是grepsedawk这三个命令。其中sed命令的详细用法有很多但这里只介绍了常见用法。
后续的示例都是在hello.txt的基础上进行的

[root@bigData01 ~]# cat hello.txt 
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
abc

文章目录

1. 增添数据

  1. 在指定行的下一行增添内容(a参数)

a参数表示在指定行的下一行增添数据sed后面的参数格式为[address]a\新文本内容address表示要操作的具体行是个可选项不指定行数就会在每一行的后一行都增添内容例如2a\haha表示在第二行的下一行增添haha字符串。但如果要第一行增添haha字符串却不能写为0a\haha因为行号是从1开始的没有第0行这样就要用的i命令详见下文。

[root@bigData01 ~]# sed '2a\haha' hello.txt 
Hello world!
Hello world!
haha
Hello world!
Hello world!
Hello world!
Hello world!
abc
[root@bigData01 ~]# sed '1a\haha' hello.txt 
Hello world!
haha
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
abc
[root@bigData01 ~]# sed 'a\haha' hello.txt 
Hello world!
haha
Hello world!
haha
Hello world!
haha
Hello world!
haha
Hello world!
haha
Hello world!
haha
abc
haha
  1. 在指定行的上一行增添内容(i参数)

i参数表示在指定行的上一行增添内容sed后面的参数格式为[address]i\新文本内容address表示要操作的具体行是个可选项不指定行数就会在每一行的前一行都增添内容例如1i\haha表示在第一行的前一行增添haha字符串。

[root@bigData01 ~]# sed '1i\haha' hello.txt 
haha
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
abc
  1. 在最后一行增添内容($参数)

$i\haha表示在最后一行的前一行增添haha字符串$a\haha表示在最后一行的下一行增添haha字符串。

[root@bigData01 ~]# sed '$i\haha' hello.txt 
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
haha
abc
[root@bigData01 ~]# sed '$a\haha' hello.txt 
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
abc
haha

2. 删除内容

sed后面的参数格式为[address]daddress表示要操作的具体行是个可选项不指定行数就会删除全部内容7d表示删除第七行数据$d表示删除最后一行数据因为hello.txt的最后一行是第七行因此这两行命令的执行结果相同。

[root@bigData01 ~]# sed '7d' hello.txt 
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
[root@bigData01 ~]# sed '$d' hello.txt 
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!

3. 替换内容

  1. 不指定行替换

sed后面的参数格式为[address]s/pattern/replacement/flags这里的address 表示指定要操作的具体行是一个可选项。
s表示替换操作pattern指的是需要替换的旧内容replacement指的是要替换的新内容flags有多种用法我们挑两种说一下
第一种就是flags可以表示为1~512之间的任意一个数字表示指定要替换的字符串在这一行中出现第几次时才进行替换
第二种就是flags可以直接表示为g这样的意思就是对每一行数据中所有匹配到的内容全部进行替换如果flags位置的值为空则只会在第一次匹配成功时做替换操作

[root@bigData01 ~]# sed 's/l/a/1' hello.txt 
Healo world!
Healo world!
Healo world!
Healo world!
Healo world!
Healo world!
abc
[root@bigData01 ~]# sed 's/l/a/2' hello.txt 
Helao world!
Helao world!
Helao world!
Helao world!
Helao world!
Helao world!
abc
[root@bigData01 ~]# sed 's/l/a/g' hello.txt 
Heaao worad!
Heaao worad!
Heaao worad!
Heaao worad!
Heaao worad!
Heaao worad!
abc
[root@bigData01 ~]# sed 's/l/a/' hello.txt 
Healo world!
Healo world!
Healo world!
Healo world!
Healo world!
Healo world!
abc
  1. 指定行替换

若要指定行替换只需要在原命令的基础上增添address参数即可。

[root@bigData01 ~]# sed '2s/l/a/2' hello.txt 
Hello world!
Helao world!
Hello world!
Hello world!
Hello world!
Hello world!
abc

4. 保存修改结果到源文件

只需添加-i参数即可。

[root@bigData01 ~]# sed '2s/l/a/2' -i hello.txt 
[root@bigData01 ~]# cat hello.txt 
Hello world!
Helao world!
Hello world!
Hello world!
Hello world!
Hello world!
abc
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: linux