• linux环境sed命令实例学习


    命令简介

    sed(Stream Editor)被称作流编辑器。linux命令环境的“三剑客”(grep,sed,awk)之一,功能强大,可以根据命令来处理数据流中的数据,命令可以在命令行中,也可以出现在一个文本文件中。

    sed一般会执行下列操作:

    ①一次从输入中读取一行数据;

    ②根据所提供的编辑器命令匹配数据;

    ③按照命令修改流中的数据;

    ④将新的数据输出到STDOUT(屏幕上);

    在流编辑器将所有命令与一行数据匹配完毕后,它会读取下一行数据并重复这个过程。在流编辑器处理完流中的所有数据行后,它就会终止。

    必备知识

    正则表达式

    速记参考:http://man.linuxde.net/docs/shell_regex.html

    测试环境

    CentOS 7.x

    具体实例

    说明:以下例子来自网络整理,可能某些问题用sed并非简便,此处拿来仅供学习,实际匹配操作根据不同文本文件环境做轻微调整,主要涉及到了常见的实用操作(打印、删除、替换、交换、提取等)。

    打印

    1. 打印第一行

    ~]# sed -n '1p' passwd

    2. 打印最后一行

    ~]# sed -n '$p' passwd

    3. 打印第三行

    ~]# sed -n '3p' passwd

    4. 打印第三行到第八行

    ~]# sed -n '3,8p' passwd

    5. 打印第三行和第5行

    ~]# sed -n '3p;5p' passwd

    6. 打印第三行和第五号到第八行

     ~]# sed -n '3p;5,8p' passwd

    7. 打印奇数行

     ~]# sed -n 'p;n' passwd

    8. 打印偶数行

     ~]# sed -n 'n;p' passwd

    9. 打印每行3次

    ~]# sed 'p;p' passwd
    ~]# sed -n 'p;p;p' passwd

    10. 打印以mail开始的行

    ~]# sed -n '/^mail/p' passwd

    删除(一般删除)

    1. 删除空白行(打印非空行)

    ~]# sed '/^$/d' passwd
    ~]# grep -v "^$" passwd
    ~]# awk '{if($0!="") print}' passwd
    ~]# awk '{if(length!=0) print}' passwd
    ~]# cat passwd |tr -s ' '

    2. 删除第二行

    ~]# sed '2d' passwd

    3. 删除第二行到第五行

    ~]# sed '2,5d' passwd

    4. 删除第二行和第五行到第八行

    ~]# sed '2d;5,8d' passwd

    5. 删除最后一行

    ~]# sed '$d' passwd

    6. 删除奇数行

    ~]# sed '1d;n;d' passwd
    ~]# sed '1~2d' passwd

    7. 删除偶数行

    ~]# sed '2d;n;d' passwd
    ~]# sed '2~2d' passwd

    删除(替换思想)

    1. 删除每行开头的所有空格

    ~]# sed 's/^ *//' passwd
    ~]# sed 's/^ *//' passwd
    ~]# sed -r 's/( *)(.*)/2/' passwd

    2. 删除每行第一个字符

    ~]# sed  's/.//'  passwd
    ~]# sed  's/^.//g'  passwd
    ~]# sed  -r 's/(.)(.*)/2/'  passwd

    3. 删除每行最后一个字符

    ~]# sed 's/.$//'  passwd
    ~]# sed -r 's/(.*)(.)/1/'  passwd

    4. 删除每行第四个字符

    ~]# sed 's/.//4' passwd

    5. 删除每行倒数第二个字符

    ~]# sed -r 's/(.*)(.)(.)/13/' passwd

    6. 删除所有的数字

    ~]# sed -r 's/[0-9]*//g' passwd
    ~]# sed -r 's/[0-9]//g' passwd

    7. 删除每行第二个单词

    ~]# sed -r 's/([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)(.*)/1245/'  passwd
    ~]# sed -r 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/1235/'  passwd
    ~]# sed -r 's/(^[^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)/123/'  passwd

    8. 删除每行倒数第二个单词

    ~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/12456/'  passwd
    ~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)$/1345/'  passwd

    9. 删除每行最后一个单词

    ~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)/12/' passwd
    ~]# sed -r 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/124/'  passwd

    替换

    1. 用制表符替换文件中出现的所有空格

     ~]# sed -r 's/ / /g' passwd

    2. 把所有小写字母用括号()括起来

     ~]# sed 's/[a-z]/(&)/g' passwd  //用&代表前面匹配到的字母

    3. 将格式 2018/12/31 换成 2018-12-31

    ~]# echo "2018/12/31" | sed 's#/#-#g'

    4. 将文件中所有的root单词替换成大写的ROOT

    ~]# sed  's/<root>/ROOT/g' passwd

    交换(替换思想)

    1. 交换每行的第一个字符和第二个单词

    ~]# sed -r 's/^(.)([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)/52341/' /etc/passwd

    2. 交换每行的第一个单词和最后一个单词

    ~]# sed -r 's/([^a-Z]*)([a-Z]+)([^a-Z]+)(.*)([^a-Z]+)([a-Z]+)/163452/' passwd

    3. 交换每行的倒数第二个单词和最后一个单词

    ~]# sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)$/14325/' passwd

     插入(i,a)

    1. 在第一行上插入

    ~]# sed  '1iat the top'  passwd

    2. 在匹配行上插入

    ~]# sed  '/^the/iI am here'  passwd

    3. 在第二行下面插入

    ~]# sed  '2aI am here'  passwd

    4. 在最后一行下面插入

    ~]# sed  '$aat the bottom'  passwd

    结束.

    不定时更新,如有不解,欢迎留言交流 ^_^

  • 相关阅读:
    结构体
    指针
    数组
    银行取款机系统
    函数
    基础
    IOS系统的安装和Vi的操作模式以及简单的指令
    1203.4——循环语句 之 for
    1203.3——循环语句 之 while
    1203.2——条件语句 之 switch语句
  • 原文地址:https://www.cnblogs.com/ding2016/p/9155906.html
Copyright © 2020-2023  润新知