zoukankan      html  css  js  c++  java
  • SED命令详解

    SED常用功能

    1. 处理文本文件
    2. 分析日志文件
    3. 修改配置文件

    SED处理流程

    文本或管道输入—-读入一行到模式空间(临时缓冲区)—-sed命令处理—–输出到屏幕—-读入一行到模式空间—–循环

    SED原则

    1. sed一次处理一行内容
    2. sed不改变文件内容(除非重定向或者 -i 参数)
    3. sed可以对所有行进行操作,也可以根据正则选择选定行

    SED的格式

    1. 命令行格式
      sed [options] ‘command’ file
      options: -e -n -i
      command: 行定位(或正则)+ sed命令(操作)
    2. 脚本格式
      sed -f script file

    SED命令

    -p:           –/etc 下的passwd文件

    1. sed ‘p’ passwd
      输出两行同样内容,因为sed本身就是输出到屏幕,然后‘p’命令再一次打印
    2. sed -n ‘p’ passwd
      -n 忽略默认输出//  nl passwd       打印文件并带行号
      //  nl -b a passwd        打印文件并带行号且空行也计算行数

    行定位

    1. sed -n ’10p’ passwd        定位一行
    2. sed -n ‘/besttest/p’ passwd       使用正则表达式,用//间隔
    3. sed -n ‘6,10p’ passwd        定位多行
    4. sed -n ‘/mail/,/besttest/p’ passwd       定位多行正则匹配
    5. sed -n ’16,/besttest/p’ passwd       定位多行从第16行到匹配行
    6. sed -n ’10!p’ passwd       不选择这一行
    7. sed -n ‘6,10!p’ passwd       不选择多行
    8. sed -n ‘4~3p’ passwd        从第4行开始,每三行打印一次  开始行~步长

    基本操作命令

    a(新增行)/i(插入行)
    c(替代行)
    d(删除行)

    1. sed ’12a======’ passwd        在第12行后增加=======
    2. sed ’12i======’ passwd         在第12行前增加=======
    3. sed ‘1,5a=====’ passwd          在1到5行后面全都增加=======
    4. sed ‘5c======’ passwd          第五行替换成======
    5. sed ‘2,5c=====’ passwd          把2-5行全替换成======
    6. sed ‘5d’ passwd       删除第5行
    7. sed ‘2,5d’ passwd     删除2-5行

    练习:profile文件中最后一行添加内容——–$表示最后一行,内容前面如果需要加空格,那么在a后面               加 然后在加空格
    eg:sed -n ‘$a    export TOMCAT_HOME=XXXXX      export PATH=$PATH:$TOMCAT’ profile  >> profile
    eg:sed -i ‘$a    export TOMCAT_HOME=XXXXX      export PATH=$PATH:$TOMCAT’ profile

    练习:删除空白行—–^代表开始,$代表结束
    eg:sed ‘/^$/d’ passwd

    练习:服务器日志处理,log中打印error信息
    eg:sed -n ‘/error/p’ file.log

    替换操作

    s:

    1. sed ‘s/old/new/’ passwd     替换操作
    2. sed ‘s/:/$/g’ passwd         g 全局替换,否则每行只替换第一个

    练习:获取eth0中的ip       .*代表所有的
    eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inets+//’ | sed ‘s/s+netmask.*//’
    先获取有ip的那行,然后把ip前面替换成空,后面替换成空,空格占位符是s,+代表一个以上且要转义。

    sed高级操作

    {}:多个sed命令,用;隔开,然后用{}括起来。
    eg:nl -b a passwd | sed ‘{10,20d;s/:/%/g}’
    删除10-20行,并且把:替换成%。(不加{}也可以)
    eg:nl -b a passwd | sed -n ‘{n;n;p}’
    读取下一个输入行

    &:替换固定的字符串,代表前面匹配的字符
    eg:sed ‘s/^[a-z_-]+/& /’ passwd
    用户名后面统一添加空格

    练习:将用户名的首字母转换为大写
    u    l:对首字母转成大写或小写
    U    L:对一串字符转成大写或小写
    eg:sed ‘s/^[a-z_-]+/u&/’ passwd
    eg:ls | sed ‘s/.*/U&/’

    ():需要转义(),代表替换某部分字符串(12)
    eg:sed ‘s/w1(w2)(w3)/12/’ xxx.txt

    练习:获取eth0中的ip
    eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inet.*s+([0-9.]+)s+netmask.*/1/’
    注意:如果取值前面包含空格使用.*不好使,需要s+代表空格,否则取不到值。
    eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inets+([0-9.]+).*netmasks+([0-9.]+).*broa*.*s+([0-9.]+)/1/’
    替换123取不同的值

    练习:获取passwd文件中,用户名、uid、gid
    eg:sed ‘s/(^[a-z_-]+):x:([0-9]+):([0-9]+).*/1 2 3/’ passwd

    sed的读写操作

    r:读取指定文件插入到匹配行
    sed ‘1r 123.txt’ abd.txt
    读文件不会更改文件内容    1r 代表从第几行开始
    w:复制匹配行拷贝到指定文件里
    sed ‘1w 123.txt’ abc.txt              复制abc文件的第一行到123的文件中去,123文件内容会变化。
    写操作会清除目标文件内容,然后再写内容进去。

    sed退出操作

    q:退出sed,使用q可以提前退出sed
    nl -b a passwd | sed ’10q’         打印前10行。
    nl -b a passwd | sed ‘/false/q’         打印直到出现false为止

    sed连续命令

    e:

    nl -b a passwd | sed -e ‘10,20d’ -e ‘s/:/%/g’

     

  • 相关阅读:
    React同构直出优化总结
    Kubenertes资源分配之Request和Limit解析
    Node Server零基础——开发环境文件自动重载
    Vue组件开发实践之scopedSlot的传递
    【干货合集】Docker快速入门与进阶
    ES6 中的 Set
    十个书写Node.js REST API的最佳实践(上)
    oozie配置安装与原理
    Livy原理详解
    阿里(蚂蚁金服)招聘
  • 原文地址:https://www.cnblogs.com/xiaowenshu/p/9957084.html
Copyright © 2011-2022 走看看