• sed编辑器


    Linux文本三剑客: grep sed awk

    grep(查) ,按行处理

    sed(行编辑器),按行处理

    sed是一种流编辑器,每一次处理内容,只有确认,才会生效,如果不确认,只是把模式空间的临时数据展示给用户,然后删除

    按照文本的行,一行一行向下处理,只到文件的最后一行

    默认情况下,sed都是在模式空间执行,因此原文件不会发生变化,要变化怎么办??

    sed的操作格式

    sed -e "操作" 文件1 文件2

    sed -e "操作1;操作2" 文件

    -e:指定命令来处理输入的文本文件,只有一个操作,-e可以省略。多个指令才会用-e

    -f:用特点的脚本文件来处理输入的文件

    -i:立即生效

    -n:仅显示script 处理后的结果

    sed -i 立即生效 慎用

    sed的操作符:

    p:打印

    =:只打印行号

    打印:

    sed -e 'p' test.txt

    sed自己还有一个默认输出,再加上打印,一共两行

    sed -ne ‘p’ test.txt

    取消默认输出

    sed -n '2p' test.txt

    输出指定行的内容,只有第二行

    sed -n '=' test.txt

    只显示行号

    sed -n '=;p' test.txt

    显示行号和内容

    sed -n '$p' test.txt

    打印最后一行

    sed -n '1,3p' test.txt

    第一行到第三行

    sed -n '1p;2p' test.txt

    第一行和第二行

    sed -n '1p;$p' test.txt

    sed -n -e '1p' -e '$p' test.txt

    第一行到最后一行的两种写法

    sed -n 'n;p' test.txt

    n在p前面,跳过当前一行,打印下一行 偶数行

    p在前面,则打印当前一行,跳下一行继续使用 奇数行

    文本内容过滤-----sed

    sed -n '/xx/p' test.txt

    xx为需要过滤的内容

    使用正则表达式过滤

    sed -n '/^root/p' /etc/passwd

    用正则表达式过滤root开头的行

    sed -n '/bash$/p' /etc/passwd

    用正则表达式过滤bash结尾的行

    sed -n '4,/bash$/p' /etc/passwd

    第四行到第一个bash

    sed使用扩展正则表达式,

    sed -r 表示可以使用扩展正则。{n} {n,} {n,m} {,m}

    思考题:

    1.包含两个99:的所在行

    sed -nr '/(99:){2}/p' /etc/passwd

    2.打印所有要么是以root开头,要么是以bash为结尾的行,打印

    sed -nr '/^root|bash$/p' /etc/passwd

    sed删除文件:

    现在有一个文件,文件名我想保留,但是原有内容我要删除,免交互删

    方法一

    方法二

    "d":操作符,删除的意思,对行操作

    删除指定行

    sed -n '3d;p' test.txt

    删除第五行到最后一行

    sed -n '5,$d;p' test.txt

    除了一到四,其余删除(!取反)

    sed  -n '1,4!d;p' test.txt

    一到六行删除(包括1和6)

    sed '/one/,/six/d' test.txt

    过滤空行

    cat test.txt | sed '/^$/d'

    我们用grep也可以实现

    sed 修改替换功能

    操作符

    s:替换字符串

    意思为替换第几个出现的root,然后替换

    sed -n 's/root/test/gp' /etc/passwd 全量替换

    思考题

    1.以root开头处理,把开头为空的替换成# /etc/passwd

    sed -n '/^root/ s/^/#/gp' /etc/passwd

    2.对字母字符进行大小写替换

    l&:转换为小写的特殊符号,在前面加上转义符才可以

    sed 's/[A-Z]/\l&/g' test.txt

    把小写换成大写

    u&:转换成大写的转移符号

    u换成大写的U,然后加上g就可以全部换成大写

    c:整行替换

    sed '/one/c 22' test.txt

    思考题:通过ifconfig修改ip:

    cat ifcfg-ens33 | sed '/IPADDR/c IPADDR=1.1.1.1'

    y:单字符替换,替换前后的字符长度要保持一致

    sed 'y/on/12/' test.txt

    将o替换成1,n替换成2

    前后长度要保持一致,若后者数量多余前者,会报错

    sed--增

    a:在匹配行的下一行添加内容

    sed '/three/a zzr' test.txt

    i:在匹配行的上一行添加内容

    sed '/three/i 哈哈哈' test.txt

    r:可以从其他文件读取内容,然后在匹配行的行后添加

    可以直接在文本末行添加

    sed '$a 123' test.txt

    sed当中字符串分组询问

    用脚本运行   -f

    将空格替换为下划线

    命令文件

    处理对象为456.txt

    思考题:过滤文件中的数字

    当然。用grep一步就可以完成:

    总结:

    sed可以增,删,改,查

    sed也可以结合正则表达式,但是sed的最主要作用就是改,增

    使用sed命令时注意一点:大文件一定要分隔之后再交给sed处理

    搭配扩展正则:sed -r {n} {n,m} {,m} 可以不需要加\

    使用sed -i 立即生效,要注意事先做好测试,还要做好备份

  • 相关阅读:
    2023年计划
    用超声波清洗机来洗眼镜好不好?眼镜超声波清洗机推荐
    【Rust日报】2023-09-26 Deadpool v0.10 发布
    MQTT代理和C# 简单连接代理 简单订阅和发送消息含测试demo
    借助node.js+express框架简单搭建服务器运行前端打包代码
    Ubuntu下配置hive
    P7557 [USACO21OPEN] Acowdemia S
    JCEF 初体验,window系统构建jar包
    MongoDB - 简单了解
    java io流中为什么使用缓冲流就能加快文件读写速度
  • 原文地址:https://blog.csdn.net/qq_51506982/article/details/133283162