前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中sed命令简单介绍

Linux中sed命令简单介绍

原创
作者头像
似水流年o
修改2024-04-02 17:29:41
1.8K0
修改2024-04-02 17:29:41
举报
文章被收录于专栏:编程学习收获编程学习收获

Linux中有关sed的命令;

说到sed命令,就不得不sedawkgrep三个命令,很多时候这三个命令是一同出现的;

对三者进行一个总结:

  • sed:常用来做行数据增删改查
  • awk:常用来做列数据切分与提取
  • grep:常用来做全局数据的查询定位

sed命令作用:

  • 对Linux中的文本文件进行逐行读取,读到匹配的行按照既定的规则进行处理

语法介绍

代码语言:javascript
复制
sed [选项] [编辑命令] [文件]

常用选项包括:

代码语言:javascript
复制
 -e :直接在命令行模式上进行sed动作编辑,此为默认选项;
 -f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
 -i :直接修改文件内容;
 -n :只打印模式匹配的行;
 -r :支持扩展表达式;

常用编辑包括:

代码语言:javascript
复制
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(下一行);
c :取代, c 的后面可以接字串,整行替换;
d :删除,删除指定行delete,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(上一行);
p :打印,亦即将某个选择的数据印出,和-n一起使用;
s :取代,字符串替换,通常这个 s 的动作可以搭配正规表示法;
g :全局,如果不使用 g 标记,sed 的替换命令只会替换每一行中的第一个匹配项。当使用 g 时,它会替换行中的所有匹配项;

sed实战:

  • 查询(p/n命令)
代码语言:javascript
复制
cat 1.txt
1
2
3
4
5
6
7
8
9
10

// 查询第8行数据
sed '8p' 1.txt ('8p'表示打印第8行,默认除了打印第8行外,还会打印文本所有数据)
1 
2 
3 
4 
5 
6 
7 
8 
8 
9 
10 

// 只查询第8行数据
sed -n '8p' 1.txt ('-n,8p'表示只查询第8行数据)
8

// 只查询第2~5行数据
sed -n '2,5p' 1.txt ('2,5p'表示第2~5行)
2
3
4
5

// 只查询第2行、第5行数据
sed -n '2p;5p' 1.txt ('2p;5p'表示第2行、第5行)
2
5

// 只查询第2行以及后3行数据
sed -n '2,+3p' 1.txt   ('2+3p'表示第2行以及后3行)
2 
3 
4 
5 

// 只显示最后一行
sed -n '$p' 1.txt  ('$'表示最后一行)
10

// 只显示1开头的行
sed -n '/^1/p' 1.txt  ('^1'表示1开头)
1
10

// 从第1行开始,每隔2行输出
sed -n '1~2p' 1.txt
1
3
5
7
9
  • 取代 (s命令)
代码语言:javascript
复制
cat 1.txt
111
221
331
441
551
1001

// 每行行首添加#符号
sed -n 's/^/#/p' 1.txt = sed 's/^/#/' 1.txt  ('^'表示行首)
#111
#221
#331
#441
#551
#1001

// 1~3行行首添加#符号
sed -n '1,3s/^/#/p'  1.txt
#111
#221
#331

// 行尾添加!符号
sed -n 's/$/!/p' 1.txt = sed 's/$/!/' 1.txt ('$'表示行尾)
111!
221!
331!
441!
551!
1001!

// 每行中第一次出现的1替换为a
sed 's/1/a/' 1.txt  
a11
22a
33a
44a
55a
a001

// 每行中的1都替换为a
sed 's/1/a/g' 1.txt ('g'表示全局匹配)   
aaa
22a
33a
44a
55a
a00a

// 将第2行改成'22222221'
sed '2s/.*/22222221/g' 1.txt   ('.*'表示该行所有内容)
111
22222221
331
441
551
1001


cat 1.txt
1    a
  12 b
6       c
5 d 

// 删除所有空格
sed 's/ \+//g' 1.txt  (' \+'表示多个空格,在正则表达式中,'+'通常用来表示一个或多个匹配。如果不加'/g'则只删第一个匹配到的空格)
1a
12b
6c
5d

// 删除每行行首的空格
sed 's/^ \+//' 1.txt   ('^ \+')
1    a
12 b
6       c
5 d 

// 删除每行行尾的空格
sed 's/ \+$//' 1.txt

// 将多个空格替换为单个空格 (sort排序前的操作,为了保证sort排序,还要去除每行首行的空格)
sed 's/ \+/ /' 1.txt
1 a
 12 b
6 c
5 d 

cat 1.txt
/666
/234
?13
!21

// 将'/666'替换为'\666'
sed 's/\/123/\\666/g' 1.txt  ('\'表示定界符)
\666
/234
?13
!21
  • 插入(i/a命令)
代码语言:javascript
复制
cat 1.txt
apple
orange
banana

// 在第二行前插入tomato
sed '2i\tomato' 1.txt  ('\'用于指示换行)
apple
tomato
orange
banana

// 在第二行前插入多行数据
sed '2i\
a\
b\
c' 1.txt
apple
a
b
c
orange
banana


// 在第二行后插入tomato
sed '2a\tomato' 1.txt  ('\'用于指示换行)
apple
orange
tomato
banana

// 在第二行后插入多行数据
sed '2a\
a\
b\
c' 1.txt
apple
orange
a
b
c
banana

// 在最后一行后插入数据
sed '$a\tomato' 1.txt
apple
orange
banana
tomato
  • 插入(d命令)
代码语言:javascript
复制
cat 1.txt
apple
orange
banana

//删除第2行数据
sed '2d' 1.txt  
apple
banana

//删除含有ap数据
sed  '/ap/d' 1.txt  =  grep -v 'ap' 1.txt
orange
banana


cat 1.txt
apple

orange

banana

//删除空行
sed '/^$/d' 1.txt  
apple
orange
banana

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sed命令作用:
  • 语法介绍
  • 常用选项包括:
  • 常用编辑包括:
  • sed实战:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档