• shell笔记_sed语句


    sed命令

           Linux文本处理三剑客 之 sed

           sed stream EDite

                  作为行编辑器,对文本进行编辑(以行为单位进行编辑)

                  注意:sed编辑文件,却不改变原文件;

          

           sed的工作原理:

                  指定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改、保存等)

           用法:

                  sed [OPTION]... {script-only-if-no-other-script} [input-file]...

                  sed [参数] “sed自己独立的用法格式的语句”[文本文件]

           常见选项

                  -n 拒绝默认显示

                  -r  指定使用扩展的正则表达式

                         匹配IP

                         1、所有的 都不要 2、 | 或者

                  -e script   for while if

                  -f 指定脚本文件

                  -l  指定文本换行的长度?

                  -i  直接修改文件内容(不要使用)

                 

           地址定界方式

                  1、直接匹配数值

                         sed -n '5p' 文件

                  2、 d~步长      

                         sed -n '1~3p' 文件

                  3、$  指定行尾

                         sed -n '10,$p' 文件

                  4、/正则/

                       /正则1/,/正则2/

                         sed -n '/k{5,}/,$p' abc

                         sed -n '/(fd)+/,+2p' abc  ? 正则写在前面就没有问题,写在后面就有问题

                         sed -n '

                  5、0,addr

                         addr 可以为 数字/$/正则表达式

                         sed -n '0,/k{5,}/p' abc

                  6、addr,+N   

                         配置addr行到,addr后N行

                         sed -n '/fd/,+5p' abc

           **常见命令

                  p  print  打印(默认在屏幕上显示出来) 建议和 -n 一起使用;

                  c  替换

                         sed "/aaa/c A" a

                  d 删除

                         sed "/aaa/d" a

                         sed "1,3d" a

                  n N  读取/添加  模式匹配到的行的下一行内容,再对其进行操作

                  w 保存文件内容到一个新的文件

                         sed "/patthen/w 新的文件名" 原来的文件名

                         sed "/k/w /tmp/aabbcc" abc

                  *s*  文本内容替换,默认替换模式空间匹配到的第一项;

                         语法格式: s/pattern/字符串/

                                中间的 / 可以替换为任意一个特殊字符 例如:s### s@@@ s%%%%

                         g   全部

                         1 2   和正则表达式的分组相同,实现反向应用;

                                指定某一个匹配项进行修改替换

                         &  调用前面(pattern)匹配的内容

                                sed "s/r..t/&er/g" 文件

                         w

                         p

                               

           sed的高级应用

                  模式空间  --  hold space"占有空间"

                  以后自己取学习

           练习:

           删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;

                  sed 's/^[[:space:]]+//g' /boot/grub/grub.conf

           删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行   的行首的#和空白字符;

                  sed 's/^#[[:space:]]+//g' /etc/fstab

           给定一个目录,取出其目录名

                  echo "/etc/passwd"  |  sed 's/[^/]+$//'

           给定一个目录,取出其文件名

                  echo "/etc/passwd" | sed 's#^/.*/(.*)##

           /var/log/message   

                  sed '/[^/]+/'

                 

                  dirname --  取出文件路径的路径部分

                  basename  --  取出文件路径的文件名部分

  • 相关阅读:
    算法模板——线性欧拉函数
    2818: Gcd
    1688: [Usaco2005 Open]Disease Manangement 疾病管理
    3314: [Usaco2013 Nov]Crowded Cows
    3450: Tyvj1952 Easy
    1664: [Usaco2006 Open]County Fair Events 参加节日庆祝
    1054: [HAOI2008]移动玩具
    1432: [ZJOI2009]Function
    1121: [POI2008]激光发射器SZK
    1113: [Poi2008]海报PLA
  • 原文地址:https://www.cnblogs.com/baocx/p/11400751.html
Copyright © 2020-2023  润新知