Linux三剑客之Sed
创始人
2024-05-13 03:29:04

目录

一、认识sed

二、使用sed

 命令格式

常用选项options

 地址定界

 编辑命令command

sed用法

常用选项:

地址界定演示

编辑命令command演示

sed高级编辑命令


一、认识sed

  sed 是一种流编辑器,它一次处理一内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或-i

  功能:主要用来自动编辑一个或多个文件, 简化对文件的反复操作

二、使用sed

 命令格式

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

常用选项options

  • -n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行

  • -e:多点编辑,对每行处理时,可以有多个Script

  • -f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写

  • -r:支持扩展的正则表达式

  • -i:直接将处理的结果写入文件

  • -i.bak:在将处理的结果写入文件之前备份一份

 地址定界

  • 不给地址:对全文进行处理

  • 单地址:

    • #: 指定的行

    • /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开始的大小写转换

sed用法

常用选项:

p:打印当前模式空间内容,追加到默认输出之后

 -n 不显示没匹配的行

 

 -e 多点编辑

 

 -i 直接对文件进行处理(.bak为备份文件)

 

地址界定演示

不指定行,打印全文

 替换第2行的b->B

 只打印所选中的内容

 打印1-2行的内容

 将奇数行的a或A替换为E

编辑命令command演示

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

sed高级编辑命令

格式

  • h:把模式空间中的内容覆盖至保持空间中

  • H:把模式空间中的内容追加至保持空间中

  • g:从保持空间取出数据覆盖至模式空间

  • G:从保持空间取出内容追加至模式空间

  • x:把模式空间中的内容与保持空间中的内容进行互换

  • n:读取匹配到的行的下一行覆盖 至模式空间

  • N:读取匹配到的行的下一行追加 至模式空间

  • d:删除模式空间中的行

  • D:删除 当前模式空间开端至\n 的内容(不再传 至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...