侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

sed命令行编辑器 【原创】

2022-07-10 星期日 / 0 评论 / 0 点赞 / 105 阅读 / 9696 字

sed命令行编辑器sed是非交互式的编辑器,它按行处理对象文件,但不修改处理文件本身,而是逐行读入文件内容并在临时缓存区保存副本并对其进行处理。处理完成每一行就将该行目标内容打印到屏幕,并将该缓存区内

.

sed命令行编辑器


sed是非交互式的编辑器,它按行处理对象文件,但不修改处理文件本身,而是逐行读入文件内容并在临时缓存区保存副本并对其进行处理。处理完成每一行就将该行目标内容打印到屏幕,并将该缓存区内容删除,然后读入下一行进行处理。另外需要注意的是,和grep不同,sed不论是否知道指定的模式,它的退出状态都是0(Linux中通常代表真)。只有存在语法错误时,sed的退出状态才不是0。


用单引号,双引号没有用

默认修改原文件,-n 静默显示-i 修改源文件-e 脚本-f 指定文件,里面可以有脚本sed -f/path/脚本路径 file指定的文件-r 使用扩展表达式


我的原料

var.txt

yum_list

【关于分隔符】与查找内容冲突可以用 / / /, @ @ @ ,# # #

w 命令

【删除行 管理】d

删除第二行                sed '4d ' var.txt删除第二行到最后一行    sed '4,77d' var.txt删除包含root 的所有行     sed '/root/'d var.txt替换所有root为lclg为全部        sed 's/root/lcl/g' var.txt删除到最后一行                  sed '4,$d' ll.txt删除+4行                          sed '5,+6d'll.txt以反斜线开头的都删除              sed '/^///d' fatab



【打印 行 管理】p

显示模式空间内容,并把符合条条件的显示两次sed '/^///p' fatab

只显示匹到的内容sed -n '/^///p' fatab



【行追加】a

在符合条件的行下面追加新的内容  

sed '/^///a /#hello world' fstab/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1#hello wordUUID=5dbd32f9-d400-4e24-a7fa-af5199575fe1 /boot                   ext4    defaults        1 2/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2#hello word/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0#hello wordtmpfs                   /dev/shm                tmpfs   defaults        0 0devpts                  /dev/pts                devpts  gid=5,mode=620  0 0sysfs                   /sys                    sysfs   defaults        0 0

我要追加两行呢

 sed '/^///a /#hello /n linux' fstrab



【在匹配到的前面追加行】i

使用方法与a一样

【在匹配到的行下面,追加一个文件的内容】,也可用于合并文件

在第5行下面把当前路径下的aaaa追加进来 sed '5r aaaaa' fastab

[root@localhost home]# sed '4r aaaaaa' fstab ## /etc/fstab# Created by anaconda on Fri Jun  5 18:17:35 2015423423894u234u2p93423423423523523523523## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1UUID=5dbd32f9-d400-4e24-a7fa-af5199575fe1 /boot                   ext4    defaults        1 2/dev/mapper/VolGroup-lv_home /home                   ext4    defaults        1 2/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0tmpfs                   /dev/shm                tmpfs   defaults        0 0devpts                  /dev/pts                devpts  gid=5,mode=620  0 0sysfs                   /sys                    sysfs   defaults        0 0proc                    /proc                   proc    defaults        0 0

把第5行到第7行都追加一次这个文件的内容

sed '5,7raaaaa'fastabsed '5,7r aaaaa'fastab 这个空格要不要都可以



w 另存为

在fastab里匹配oot 并保存到当前路径下的haha.txt文件内,默认还会显示一次

sed '/oot/w haha.txt' fatab

加上-n就不会把默认的显示出来

sed -n '/oot/w haha' fstab



【s 替换】

把fstab里面的oot逐行替换为OOTsed 's/oot/OOT/'fstab我把fstab,每行首次出现斜杠/替换为#,注意逃逸字符sed 's/////#/' fstab只对行首出现的斜杠/做处理sed 's/^////#/' fstrabg对找到的匹配进行全局替换,把/替换为#sed 's/////#/g'i忽略大小写,与g用法一样


【正则表达式】

&引用整个字符串,不管前面的字符串有多长正则表达式,把模式引用起来,后向引用源文件内容hello ,likehi ,my love执行命令 sed 's#l..e#&er#g' sed.txt或者执行sed 's#/(l..e/)#/1er#g' sed.txthello ,likeerhi ,my loveer匹配并修改了文件



遇到匹配模式,只是修改其中一部分 怎么办


把能匹配到l..e的表达式,改为L..eer

sed 's#l/(..e/)#L/1er#g' sed.txt

hello ,Likeer

hi ,my Loveer


-r 使用扩展表达式

把history的前面空格你删除

history | sed 's#[[:space:]]*##g' 无论你行首有多少个空格,都给你删掉

显示history历史命令页面的第一段

history | sed 's#^[[:space:]]*##g' | cut -d' ' -f1

 


.

广告 广告

评论区