ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

centos 7中的文本处理工具sed命令的使用

2021-03-22 14:52:54  阅读:242  来源: 互联网

标签:输出 centos 文本处理 sed test txt root localhost


sed是一个强大而简答的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于shell脚本中,用以完成各种自动化处理任务。
sed的工作流程主要包括读取、执行和显示三个过程:

  • 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(也称为模式空间)。
  • 执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
  • 显示:发送修改后的内容到输出流,再发送数据后,模式空间将会被清空。
    在所有的文件内容都被处理完之前,上述过程将重复执行,直至所有内容被处理完。

默认情况下,所有sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化(也就是说只是输出的内容变了,而实际的源文件并没有被改动),除非使用重定向存储输出。

sed命令的使用:
一般有两种使用格式:

  • sed [选项] '操作' 参数
  • sed [选项] -f 脚本文件 参数
    常见的sed命令选项主要包含以下几种:
* -e或--expression=:直接在命令界面上进行sed的动作编辑
* -f或--file=:表示用指定的脚本文件来处理输入的文本文件;
* -h或--help:显示帮助;
* -n、--quiet或silent:表示仅显示处理后的结果;
* -i:直接编辑源文本文件。
* -r:sed的动作支持的是扩展型正则表达式的语法。(默认是基础正则表达式语法)。

“操作”用于指定对文件操作的动作行为,也就是sed命令。通常情况下采用的“[n1],[n2]”操作参数的格式。n1、n2是可选的,不一定会存在,代表选择进行操作的行数,如操作需要在5~20行之间进行,则表示为“5,20 动作行为”。

sed命令常见的操作包括以下几种:

* a:增加,在当前行下面增加一行指定内容。
* c:替换,将选定行替换为指定内容。
* d:删除,删除选定的行。
* i:插入,在选定行上面插入一行指定内容。
* p:打印,如果同时指定行,表示打印指定行,如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输入。其通常与“-n”选项一起使用。
* s:替换,替换指定字符,例如 “”1,20s/old/new/g”表示将1到20行的所有字符“old”替换为“new”。
* y:字符转换。

用法示例:

①、sed命令基本语法:


[root@localhost ~]# sed -n 'p' test.txt              #输出所有内容,相当于cat testtest.txt
[root@localhost ~]# sed -n '3p' test.txt            #输出第三行。
[root@localhost ~]# sed -n '3,5p' test.txt         #输出3~5行。
[root@localhost ~]# sed -n 'p;n' test.txt           #输出所有奇数行,n表示读入下一行资料。
[root@localhost ~]# sed -n 'n;p' test.txt          #输出所有偶数行,n表示读入下一行资料。
[root@localhost ~]# sed -n '1,5{p;n}' test.txt    #输出1~5行之间的奇数行,第(1,3,5行)。
[root@localhost ~]# sed -n '10,${n;p}' test.txt      #输出第10行至文件尾之间的偶数行。

②、sed命令与正则表达式结合使用:


[root@localhost ~]# sed -n '/the/p' test.txt             #输出包含the的行
[root@localhost ~]# sed -n '4,/the/p' test.txt          #输出第4行至末尾第一个包含the的行。
[root@localhost ~]# sed -n '/the/=' test.txt            #输出包含the的行所在的行号,“=”用来输出行号
[root@localhost ~]# sed -n '/^PI/p' test.txt             #输出以PI开头的行
[root@localhost ~]# sed -n '/[0-9]$/p' test.txt             #输出以数字结尾的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt      #输出包含单词wood的行,\<、\>表示单词边界。

③、删除符合条件的文本(以下操作只是输出时删除,若要删除源文件,则需结合“-i”选项):


#nl用于计算文件的行数,使结果更加易读
[root@localhost ~]# nl test.txt | sed '3d'       #删除第三行
[root@localhost ~]# nl test.txt | sed '3,5d'     #删除第3~5行
[root@localhost ~]# nl test.txt | sed '/cross/d'          #删除包含cross的行
#若要删除不包含cross的行,用!符号表示取反操作,如'/cross/! d'
[root@localhost ~]# sed '/^[a-z]/d' test.txt           #删除以小写字母开头的行
[root@localhost ~]# sed '/\.$/d' test.txt              #删除以“ . ”结尾的行
[root@localhost ~]# sed '/^$/d' test.txt             #删除所有空行

④、替换符合条件的文本:

使用sed命令进行替换操作时需要用到s(字符串替换)、c(整行/整块替换)、y(字符转换)命令选项,常用的语法如下:
centos 7中的文本处理工具sed命令的使用
⑤、迁移符合条件的文本(相当于Windows中的剪切):
H,复制到剪贴板;g、G,将剪切板中的数据覆盖/追加至指定行;w,保存为文件;r,读取指定文件;a,追加指定内容。
centos 7中的文本处理工具sed命令的使用
⑥、使用脚本编辑文件:
使用sed脚本,将多个编辑指令存放到文件中(每行一条编辑指令),通过-f来调用,如:

[root@localhost ~]# sed '1,5{H;d};17G' test.txt                #将第1~5行内容转移至第17行后
#以上操作可改用脚本文件方式,如下:
[root@localhost ~]# vim opt.list

1,5H
1,5d
17G
[root@localhost ~]# sed -f opt.list test.txt      #使用“-f”选项来调用脚本。

标签:输出,centos,文本处理,sed,test,txt,root,localhost
来源: https://blog.51cto.com/14223370/2668336

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有