zoukankan      html  css  js  c++  java
  • 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

    结束.

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

  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/ding2016/p/9155906.html
Copyright © 2011-2022 走看看