zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Linux||sed命令使用讲解

2023-02-26 10:16:28 时间

sed是stream editor的缩写,译为"流编辑器",一般用来对文本数据进行增删改查即新增、删除、替换、查找。

与其他命令不同的是sed命令在处理数据之前,需要预先提供一组规则,sed会按照此规则来处理数据。处理时,sed 会把要处理的行存储在缓冲区中,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。这个缓冲区被称为“模式空间”(pattern space)

用法: sed [参数] 操作 [文件]

常见参数

  • -n:只显示经过sed处理的行
  • -e:执行多个命令
  • -f:执行含有sed命令的文件
  • -r:支持扩展正则表达式(默认为基础正则表达式)
  • -i:直接修改读取的文件内容,不输出

命令

  • -a:新增,在当前行的后一行新增a后面的字符串
  • -c:替换
  • -d:删除
  • -i:插入,在当前行的前一行新增i后面的字符串
  • -p:打印,将选择的数据打印出来,通常与-n同时使用
  • -s:替换,常搭配正则表达式;如2,5s/are/is/g

看似简单的用法其实复杂的很!参数我们已经提到了,那操作是什么呢?

操作:范围+命令

范围设定,可以采用两种不同的方式来表达:

  1. 指定行数:比如'3,5'’'表示第三至第五行;而'3,$'示第三行至文件最后一行。
  2. 模式匹配:比如/^[^Aa]/表示匹配行首不是以A或a开头的行。

操作必须用单/双引号扩住,[]的内容可以省略。

接下来给大家举几个例子,我在test.txt文件中写入了这么3句话

a新增

在第二行后新增有what的一行

sed "2a what" test.txt

  • 在第二行后新增多行what:sed "2a what\what\what" test.txt

c替换

将第二和第三行替换成what

sed "2,3c what" test.txt

d删除

将第二和第三行删除

sed "2,3d" test.txt

  • 删除第二至最后一行 sed "2,$d" test.txt

i插入

在第二行前新增有what的一行

sed "2i what" test.txt

p打印

只打印第一和第二行

sed -n "1,2p" test.txt

s替换

将第一至第三行中的is替换成are

sed "1,3s/is/are/g" test.txt

现在看起来挺简单的对吧?那不如看几个进阶练习题

## 进阶1

# 查看/etc/passwd的前5行
(base) zwang@ken_bioinfo:~$ head -n 5 /etc/passwd 
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

# 使用sed命令将冒号及后面的内容删掉
(base) zwang@ken_bioinfo:~$ head -n 5 /etc/passwd|sed 's/:.*$//' 
root
daemon
bin
sys
sync
## 进阶2

# 查看test.txt文件
(base) zwang@ken_bioinfo:~$ cat test.txt
This is a test file
Linux is not hard to learn
So,don't worry!

# 将带有file的行打印出来
(base) zwang@ken_bioinfo:~$ cat test.txt | sed -n '/file/p'
This is a test file

更多内容请点击左下方阅读原文~

参考资料

  1. C语言中文网

http://c.biancheng.net/linux/sed.html

  1. 鸟哥的Linux私房菜