ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文本处理sed

2022-09-16 03:00:10  阅读:195  来源: 互联网

标签:AAA AABBCCDD 文本处理 sed localhost root ccc



目录

sed简介

1、sed 是什么

  sed 全名为 stream editor,流编辑器,用程序的方式来编辑文本,功能相当的强大,可以在大多数操作系统中使用。

  sed 的出现作为 grep 的继任者,与vim等编辑器不同,sed 是一种非交互式编辑器(即用户不必参与编辑过程),它使用预先设定好的编辑指令对输入的文本进行编辑,完成之后再输出编辑结构。sed 基本上就是在玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。

2、sed 工作原理

  sed 会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为"模式空间",接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed基本命令

命令格式

语法:

sed [options] '[地址定界] command' file(s)

常用选项options

  • -n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
  • -e:多点编辑,对每行处理时,可以有多个Script
  • -f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
  • -r:支持扩展的正则表达式
  • -i:直接将处理的结果写入文件
  • -i.bak:在将处理的结果写入文件之前备份一份

地址定界

默认情况下sed会对每一行内容进行匹配、处理、输出,某些情况不需要对处理的文本全部编辑,只需要其中的一部分,比如1-10行,偶数行,或者是包含"hello"字符串的行,这种情况下就需要我们去定位特定的行来处理,而不是全部内容,这里把这个定位指定的行叫做"定址"。

  • 不给地址:对全文进行处理
  • 单地址:
    • '#': 指定的行
    • /pattern/:被此处模式所能够匹配到的每一行
  • 地址范围:
    • '#', #
    • '#', +#
    • /pat1/,/pat2/
    • '#',/pat1/
  • ~:步进
    • sed -n '1~2p' 只打印奇数行 (1~2 从第1行,一次加2行)
    • sed -n '2~2p' 只打印偶数行

编辑命令command

  • d:删除模式空间匹配的行,并立即启用下一轮循环
  • p:打印当前模式空间内容,追加到默认输出之后
  • a:在指定行后面追加文本,支持使用\n实现多行追加
  • i:在行前面插入文本,支持使用\n实现多行追加
  • c:替换行为单行或多行文本,支持使用\n实现多行追加
  • w:保存模式匹配的行至指定文件
  • r:读取指定文件的文本至模式空间中匹配到的行后
  • =:为模式空间中的行打印行号
  • !:模式空间中匹配行取反处理
  • s///:查找替换,支持使用其它分隔符,如:s@@@,s###;
    • 加g表示行内全局替换;
    • 在替换时,可以加一下命令,实现大小写转换
    • \l:把下个字符转换成小写。
    • \L:把replacement字母转换成小写,直到\U或\E出现。
    • \u:把下个字符转换成大写。
    • \U:把replacement字母转换成大写,直到\L或\E出现。
    • \E:停止以\L或\U开始的大小写转换

用法演示

常用选项options演示

[root@localhost ~]# cat z
aaa
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '/aaa/p' z   #匹配到的行会打印一遍,不匹配的行也会打印
aaa
aaa
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n '/aaa/p' z      #-n不显示没匹配的行
aaa
[root@localhost ~]# sed -e 's/a/A/' -e 's/b/B/' z    #-e多点编辑
Aaa
Bbbb
ccc
AABBCCDD
[root@localhost ~]# cat sed.txt 
s/A/a/g
[root@localhost ~]# sed -f sed.txt z      #-f使用文件处理
aaa
bbbb
ccc
aaBBCCDD

[root@localhost ~]# sed -i.bak 's/a/A/g' z   #-i直接对文件进行处理
[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# cat z.bak 
aaa
bbbb
ccc
AABBCCDD

地址界定演示

[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n 'p'  z      #不指定行,打印全文
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2s/b/B/g' z       #替换第2行的b->B
AAA
BBBB
ccc
AABBCCDD
[root@localhost ~]# sed -n '/AA/p' z    #打印AA的行
AAA
AABBCCDD
[root@localhost ~]# sed -n '1,2p' z    #打印1-2行
AAA
bbbb
[root@localhost ~]# sed -n '/AAA/,/DD/p' z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed -n '2,/DD/p' z
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2~2s/[bB]/Z/g' z  #将偶数行的b或A替换为Z
AAA
ZZZZ
ccc
AAZZCCDD

编辑命令command演示

[root@localhost ~]# cat z
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '2d' z      #删除第2行
AAA
ccc
AABBCCDD
[root@localhost ~]# sed -n '2p' z    #打印第2行
bbbb
[root@localhost ~]# sed '2a123' z    #在第2行后加123
AAA
bbbb
123
ccc
AABBCCDD
[root@localhost ~]# sed '1i123' z    #在第1行前加123
123
AAA
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed '3c123\n456' z      #替换第3行内容
AAA
bbbb
123
456
AABBCCDD
[root@localhost ~]# sed -n '3w/root/z3' z  #保存第3行的内容到z3文件中
[root@localhost ~]# cat z3
ccc
[root@localhost ~]# sed '1r/root/z3' z     #读取z3的内容到第1行后
AAA
ccc
bbbb
ccc
AABBCCDD
[root@localhost ~]# sed  '=' z      #=打印行号
1
AAA
2
bbbb
3
ccc
4
AABBCCDD
[root@localhost ~]# sed -n '2!p' z    #打印除了第2行的内容
AAA
ccc
AABBCCDD
[root@localhost ~]# sed 's@[a-z]@\u&@g' z     #将全文的小写字母替换为大写字母
AAA
BBBB
CCC
AABBCCDD

sed高级编辑命令

选项:

  • h:把模式空间中的内容覆盖至保持空间中
  • H:把模式空间中的内容追加至保持空间中
  • g:从保持空间取出数据覆盖至模式空间
  • G:从保持空间取出内容追加至模式空间
  • x:把模式空间中的内容与保持空间中的内容进行互换
  • n:读取匹配到的行的下一行覆盖 至模式空间
  • N:读取匹配到的行的下一行追加 至模式空间
  • d:删除模式空间中的行
  • D:删除 当前模式空间开端至\n 的内容(不再传 至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

1.一个案例+示意图演示

案例:倒序输出文本内容

[root@localhost ~]# cat num.txt 
one
two
three
[root@localhost ~]# sed '1!G;h;$!d' num.txt 
three
two
one

示意图如下:

[root@localhost ~]# cat z
1
2
11
22
111
222
#将匹配到的1复制到保持空间,并删除模式空间的1,再匹配2时,将保持空间的文本追加到匹配的2后面
[root@localhost ~]# sed '/1/{h;d};/2/{G}' z
2
1
22
11
222
111
[root@localhost ~]# cat c
hello world 1

hello world 2


hello world 3



hello world 4




happy
#将多个空行减少到一行
[root@localhost ~]# sed '/^$/{N;/^\n$/d;}' c
hello world 1

hello world 2
hello world 3

hello world 4
happy
[root@localhost ~]# sed '/^$/{N;/^\n$/D;}' c
hello world 1

hello world 2

hello world 3

hello world 4

happy
[root@localhost ~]#

标签:AAA,AABBCCDD,文本处理,sed,localhost,root,ccc
来源: https://www.cnblogs.com/z696/p/16698553.html

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

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

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

ICode9版权所有