• sed


    sed

    Sed表示流编辑器(Stream Editor)的缩写.

    出处:https://www.runoob.com/linux/linux-comm-sed.html

    语法

    sed [-hnV][-e<script>][-f<script文件>][文本文件]

    参数说明

    • -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
    • -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
    • -h或--help 显示帮助。
    • -n或--quiet或--silent 仅显示script处理后的结果。
    • -V或--version 显示版本信息。

    动作说明

    • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

    实例

    在test2文件的第四行后添加一行,并将结果输出到标准输出:

    # cat test2
    total 16
    -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
    -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
    -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log
    -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log
    # sed -e 4a
    ewline test2
    total 16
    -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
    -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
    -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log
    newline
    -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log

    以行为单位的新增/删除

    将test 的内容列出并且列印行号,同时,请将第 2~3 行删除:

    # nl test2 | sed -e '2,3d'
         1  total 16
         4  -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log
         5  -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log

    在第二行后(亦即是加在第三行)加上『testadd word』字样

    # nl test2 | sed -e '2a testadd word'
         1  total 16
         2  -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
    testadd word
         3  -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
         4  -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log
         5  -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log
    # 

    以行为单位的替换与显示

     将第4行到最后一行的内容替换成 【substitute】

    # nl test2 | sed -e '4,$c substitute'
         1  total 16
         2  -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
         3  -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
    substitute

    仅列出文件内的第 5-7 行

    # nl test2 | sed -n '2,4p'
         2  -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
         3  -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
         4  -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log

    数据的搜寻并显示

    搜索 test有error关键字的行

    # nl test2 | sed -n '/error/p'
         3  -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
         5  -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log

    数据的搜寻并删除

    删除test有error关键字的行,其他行输出 

    # nl test2 | sed  '/error/d'
         1  total 16
         2  -rw-r--r-- 1 root root 1991 Oct 23 11:03 access_log
         4  -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_access_log

    数据的搜寻并执行命令

    搜索test2,找到error对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把log替换为LOG,再输出这行:最后的q是退出。

    # nl test2 | sed  -n '/error/{s/log/LOG/;p;q}'
         3  -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_LOG

    数据的搜寻并替换

    除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代

    # sed 's/access/*****/g' test2 
    total 16
    -rw-r--r-- 1 root root 1991 Oct 23 11:03 *****_log
    -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
    -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_*****_log
    -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log

    直接修改文件内容

    sed 的 -i 选项可以直接修改文件内容

    # sed -i 's/access/*****/g' test2 
    # cat test2
    total 16
    -rw-r--r-- 1 root root 1991 Oct 23 11:03 *****_log
    -rw-r--r-- 1 root root 1614 Oct 23 11:00 error_log
    -rw-r--r-- 1 root root    0 Oct 23 10:59 ssl_*****_log
    -rw-r--r-- 1 root root  220 Oct 23 10:59 ssl_error_log
  • 相关阅读:
    java并发容器
    五种单例模式的写法
    Java中Volatile关键字
    Future模式实例
    mysql笔记
    亚马逊EC2服务器登录方法
    RSA加密方法java工具类
    Base64Util工具类
    maven命令创建项目
    关于spring事务注解
  • 原文地址:https://www.cnblogs.com/zwj-linux/p/11739150.html
Copyright © 2020-2023  润新知