0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何掌握Linux文本处理

马哥Linux运维 来源:马哥Linux运维 2024-11-10 13:40 次阅读

目录

sed用法

模式空间与保持空间

sed命令选项

sed命令的基本语法

sed命令选项

基础sed命令

高阶sed命令

基础sed命令

sed命令的基本语法

sed OPTIONS… [SCRIPT] [INPUTFILE…]

常用的选项:

-n,–quiet: 不输出模式空间中的内容

-i: 直接编辑原文件,默认不对原文件进行操作

-e: 可以使用多个命令(脚本)进行操作

-f /path/from/sed_script: 从指定的文本中读取处理脚本

-r: 使用扩展正则表达式

sed命令选项

替换标记
g:表示行内全面替换
w:表示把行写入一个文件
x:表示互换模式空间的文本和保持空间的文本
y:表示把一个字符翻译为另外的字符(不用于正则表达式)
单行模式空间
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!

d :删除,因为是删除,所以 d 后面通常不接任何东西;

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p :打印,即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s :取代,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g

n:读取下一个输入行, 用下一个命令处理新的行

y:把一个或多个字符替换成另一个字符
a的用法

[root@localhost ~]# vim xbz
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '3abbxxxx' xbz //在第三行下面(第四行)进行新增
a b c
d
c
bbxxxx
b
a
[root@localhost ~]# sed '/c/abbxxxx' xbz  //在匹配的参数(c)下一行进行添加
a b c
bbxxxx
d
c
bbxxxx
b
a

c的用法

[root@localhost ~]# cat xbz 
a b c
d
c
b
a
[root@localhost ~]# sed '2cxxb' xbz //取代第二行
a b c
xxb
c
b
a
[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/d/caa' xbz  //在匹配的参数(d)进行取代
a b c
aa
c
b
a

d的用法

root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '1d' xbz //删除第一行
d
c
b
a

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/c/d' xbz //在匹配的参数(c)进行整行删除
d
b
a

i的用法

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '2i3838' xbz  //在第二行进行插入
a b c
3838
d
c
b
a

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/c/i6868' xbz //在匹配的参数(c)那一行进行插入
6868
a b c
d
6868
c
b
a

p的用法

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed -n '/b/p' xbz //-n选项:只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出),只是打印带b的行
a b c
b

s的用法

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/' xbz //将匹配的参数(b)每行里的第一个参数进行替换
a a c
d
c
abb
a
[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/g' xbz //在上面的基础是加上g就可以全部进行替换
a a c
d
c
aaa
a

n的用法
此处的n不是sed -n的n的那种用法,是n读取下一个输入行

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed -n '/a/n;p' xbz //匹配到的参数(a)下面的所有行
d
c
bbb


y的用法

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a
[root@localhost ~]# sed '3y/c/C/' xbz //将匹配到的第三行小写c改为大写C
a b c
d
C
bbb
a

高阶sed命令

模式空间与保持空间

模拟空间:
当前处理输出的缓冲空间,因为sed就是一次处理一行的内容,就会把这一行的内容提取到模式空间,然后用sed命令处理这一行的内容,处理完成后输出到屏幕,接着处理下一行 的内容
保持空间:
保持空间就是sed的另一个缓冲区,此缓冲区如其名,不会自动清空内容,也不会把缓冲区的内容打印到的标准输出中
模式空间与保持空间的关系
模式空间:相当于流水线,文本行再模式空间中进行处理;
保持空间:相当于仓库,在模式空间对数据进行处理时,可以把数据临时存储到保持空间;作为模式空间的一个辅助临时缓冲区,但又是相互独立,可以进行交互,命令可以寻址模式空间但是不能寻址保持空间。可以使用高级命令h,H,g,G与模式空间进行交互。

sed命令选项

多行空间模式
N:读取匹配到的行的下一行追加至模式空间
P:打印模式空间开端至 内容,并追加到默认输出之前
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间 不包含换行符,则会像发出d命令那样启动正常的新循环
N追加下一行

[root@localhost ~]# cat xbz.txt 
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
available on your system.
[root@localhost ~]# sed -n '/Operator$/{N;p}' xbz.txt 
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
[root@localhost ~]# sed -n '/Operator$/{N;s/Owner and Operator
Guide/installation Guide/g;p}' xbz.txt 
Consult Section 3.1 in the installation Guide for a description of the tape drives
[root@localhost ~]# sed '/Operator$/{N;s/Owner and Operator
Guide/installation Guide/g}' xbz.txt 
Consult Section 3.1 in the installation Guide for a description of the tape drives
available on your system.
//我们假设想要将“Owner and 0perator Guide”换成“lnstallation Guide”,但是我们发现它出现在文件中的两行上,“Operator”和“Guide”被分开了。
Owner and Operator Guide 换成 installation Guide
空格用

D多行删除

[root@localhost ~]# cat test

This is the header line.
This is a data line.

This is the last line.
[root@localhost ~]# sed '/^$/{N ; /header/D}' test //删除模式空间的第一行
This is the header line.
This is a data line.

This is the last line.

P多行打印

[root@localhost ~]# cat xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/p' xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;p}' xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/{N;/
System/{p}}' xxb
Here are examples of the UNIX
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/
System/{s// Operating &/g;p}}' xxb
Here are examples of the UNIX Operating 
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/
System/{s// Operating &/g;P;D;p}}' xxb
Here are examples of the UNIX Operating 
System. Where UNIX Operating 

保持空间

命令 缩写 功能
Hold h(复制)或H (追加) 上传 将模式空间的内容复制或追加到保持空间
Get g或G下载 将保持空间的内容复制或追加到模式空间
Exchange x 交换保持空间和模式空间的内容

[root@localhost ~]# cat abc
1
2
11
22
111
222
[root@localhost ~]# sed '/1/{h;d};/2/G' abc //匹配1将内容放入保持空间,删除,在将匹配2的内容追加模式空间
2
1
22
11
222
111

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11217

    浏览量

    208814
  • SED
    SED
    +关注

    关注

    0

    文章

    24

    浏览量

    27061
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14819

原文标题:深入浅出Sed:掌握Linux文本处理的终极利器

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解Linux Shell文本处理工具

      今天给大家分享日常工作中常用到的shell文本处理工具,可以说是史上最全了,大家掌握住这些工具,可以在日常运维工作中起到事半功倍的作用!
    发表于 10-27 09:19 528次阅读

    Linux中grep、sed和awk命令详解

    今天给大家聊一聊Linux文本操作的`三剑客:awk、grep、sed`,因其功能强大、使用频繁,且是Linux文本处理的得力利器,常被称之为`
    发表于 04-26 17:20 3185次阅读
    <b class='flag-5'>Linux</b>中grep、sed和awk命令详解

    Linux中sed命令用法

    这篇文章为初学者提供了关于 Linux 中 sed 命令的全面指南,涵盖了其历史、用途以及一些实用的技巧和窍门。通过掌握 sed,您可以高效处理文本处理任务,这对于任何使用
    发表于 07-21 10:38 337次阅读
    <b class='flag-5'>Linux</b>中sed命令用法

    什么是VIM?VIM文本编辑器的三种工作模式

    Vim (Vi improved)是从 Vi 发展出来的一个文本编辑器,简单的来说,Vi 是老式的文本处理器,功能已经很齐全了,但还是有可以进步的地方。
    发表于 09-06 16:04 4627次阅读
    什么是VIM?VIM<b class='flag-5'>文本</b>编辑器的三种工作模式

    使用 Linux/Unix 进行文本处理

    使用 Linux/Unix 进行文本处理正则表达式 翻译领域不乏让人摸不着头脑的词汇,比如"句柄"、"套接字"、"鲁棒性"。当然
    发表于 11-24 15:39

    shell文本处理方法是什么

    shell文本处理三剑客—grep
    发表于 05-27 12:32

    易语言-文本处理

    易语言是一门以中文作为程序代码编程语言学习例程:易语言-文本处理
    发表于 06-06 17:43 1次下载

    Python网页爬虫,文本处理,科学计算,机器学习和数据挖掘工具集

    本文档的主要内容详细介绍的是Python工具包合集包括了:网页爬虫工具集,文本处理工具集,Python科学计算工具包,Python机器学习和数据挖掘 工具包
    发表于 09-07 17:14 37次下载
    Python网页爬虫,<b class='flag-5'>文本处理</b>,科学计算,机器学习和数据挖掘工具集

    Linux中的Grep正则表达式详细资料说明

    grep是Linux中用于文本处理的最有用和功能最强大的命令之一。 grep在一个或多个输入文件中搜索与正则表达式匹配的行,并将每条匹配的行写入标准输出。
    的头像 发表于 06-21 11:39 2171次阅读

    如何优雅地使用bert处理文本

    /jietang/publications/NIPS20-Ding-et-al-CogLTX.pdf Github: https://github.com/Sleepychord/CogLTX bert在长文本处理
    的头像 发表于 12-26 09:17 8723次阅读
    如何优雅地使用bert<b class='flag-5'>处理</b>长<b class='flag-5'>文本</b>

    一文详解Linux awk命令

    Awk是一种通用脚本语言,用于高级文本处理的。它主要用作报告和分析工具。与大多数其他程序性编程语言不同。
    的头像 发表于 12-07 17:34 1091次阅读

    文本处理技巧之正则表达式

    在LabVIEW开发过程中,有很多地方都需要处理文本数据,比如数据通讯、报表生成、协议解析、文件I/O、界面交互等,那有没有一个工具可以帮助我们快速处理文本数据呢?答案是有的,那就是:
    的头像 发表于 03-07 10:24 3787次阅读

    单日获客成本超20万,国产大模型开卷200万字以上的长文本处理

    更精准的推理和高并发流量以外,似乎已经没有太多值得厂商大肆宣传的特性了,直到最近超长文本处理的爆火。   国产大模型的新卷法,长文本处理   当下将大模型长文本处理炒热的,无疑是来自月之暗面的Kimi。作为去年发布的大模型,Ki
    的头像 发表于 03-27 00:53 3298次阅读
    单日获客成本超20万,国产大模型开卷200万字以上的长<b class='flag-5'>文本处理</b>

    MiniMax推出“海螺AI”,支持超长文本处理

    近日,大模型公司MiniMax宣布,其全新产品“海螺AI”已正式上架。这款强大的AI工具支持高达200ktokens的上下文长度,能够在1秒内处理近3万字的文本
    的头像 发表于 05-17 09:30 694次阅读

    Linux中cut命令的实用示例

    Linux command cut 用于文本处理。您可以使用此命令通过选择列从文件中提取部分文本
    的头像 发表于 08-05 15:14 281次阅读