• SHELL用法七(Sed语句)


    1、SHELL编程Sed语句案例实战

    1)SHELL编程四剑客之二的Sed工具,主要是用于Linux系统文本文件的编辑、
    打印的,也称为非交互模式编辑器(vi|vim交互模式编辑器),Sed工具的语法
    格式:
    sed -option(参数) ‘Command’(命令) file(文件对象)
     Option参数:-i(修改)、-n(静默模式)、-e(扩展)、-l、-b、-c;
     Command命令:p(打印)、d(删除)、N(多行)、G、D;
    2)SHELL编程四剑客Sed工具案例操作一,基于Sed工具将list.txt文件中的用户
    名root改为jfedu,命令如下:
    sed s/jfedu/root/g list.txt
    sed 's#jfedu#root#g' list.txt
    sed -i 's#jfedu#root#g' list.txt
    sed -e '3s/2/100/g' -e '4s/3/100/g' list.txt
    sed '3s/2/100/g;4s/3/100/g' list.txt
    sed '3,$s/11/100/g' list.txt3)替换jfedu.txt文本中old为new:
    sed
    's/old/new/g'
    jfedu.txt
    4)打印jfedu.txt文本第一行至第三行:
    sed    -n '1,3p'      jfedu.txt
    5)打印jfedu.txt文本中第一行与最后一行:
    sed   -n '1p;$p'     jfedu.txt
    6)删除jfedu.txt第一行至第三行、删除匹配行至最后一行:
    sed       '1,3d'     jfedu.txt
    sed     '/jfedu/,$d'   jfedu.txt
    7)删除jfedu.txt最后6行及删除最后一行:
    for
    i in `seq 1 6`;do sed -i
    '$d' jfedu.txt ;done
    sed    '$d'  jfedu.txt
    8)删除jfedu.txt最后1行:
    sed   '$d'   jfedu.txt
    9)在jfedu.txt查找jfedu所在行,并在其下一行添加word字符,a表示在其下一
    行添加字符串:
    sed   '/jfedu/aword'    jfedu.txt
    10)在jfedu.txt查找jfedu所在行,并在其上一行添加word字符,i表示在其上
    一行添加字符串:
    sed     '/jfedu/iword'    jfedu.txt
    11)在jfedu.txt查找以test结尾的行尾添加字符串word,$表示结尾标识,&在
    Sed中表示添加:
    sed    's/test$/&word/g'    jfedu.txt
    12)在jfedu.txt查找www的行,在其行首添加字符串word,^表示起始标识,
    &在Sed中表示添加:
    sed     '/www/s/^/&word/'     jfedu.txt
    13)多个sed命令组合,使用-e参数:
    sed -e '/www.jd.com/s/^/&1./' -e 's/www.jd.com$/&./g'   jfedu.txt
    14)多个sed命令组合,使用分号“;”分割:
    sed -e '/www.jd.com/s/^/&1./;s/www.jd.com$/&./g' jfedu.txt
    15)Sed读取系统变量,变量替换:
    WEBSITE=WWW.JFEDU.NET
    Sed “s/www.jd.com/$WEBSITE/g” jfedu.txt
    16)修改Selinux策略enforcing为disabled,查找/SELINUX/行,然后将其行
    enforcing值改成disabled、!s表示不包括SELINUX行:
    sed -i     '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
    sed -i    '/SELINUX/!s/enforcing/disabled/g' /etc/selinux/config
    17)合并上下两行,也即两行合并:
    sed     'N;s/
    / /'     jfedu.txt
    18)打印list.txt文件的行号,命令操作如下:
    for i in `seq 1 $(cat list.txt |wc -l)`;do sed -n "${i}s/^/&$i) /p" list.txt ;done
    sed = list.txt |sed 'N;s/
    /) /g'
    2、SHELL编程Grep语句案例实战
    1)Find是Linux操作系统文件和目录的路径检索、查询工具,而Grep是Linux
    系统下文本文件内容检索或者匹配工具,Grep称为全局正则表达式检索工具,
    在企业中被广泛的采用。
    2)Grep工具的语法格式:grep -option(参数) ‘word’(关键词) file
    (文本文件);
     Option参数:-a(文本方式)、-c(统计)、-i(忽略大小写)、-n(行号)、
    -v(反选)、-o(仅匹配)、-w(词组)、-A(匹配之后)、-B(匹配之
    前)、-C(匹配前后);3)Grep企业案例实战一,查找/etc/passwd文件中是否存在www用户信息,
    命令操作如下:
    grep root /etc/passwd
    grep "root" /etc/passwd
    grep -w "^root" /etc/passwd
    grep -i "root" /etc/passwd
    4)Grep企业案例实战二,ifconfig看到网卡信息,只查看IP地址所在行信息,
    命令操作如下:
    ifconfig|grep netmask
    ifconfig|grep -w inet
    ifconfig|grep -w 255
    ifconfig|grep -E "172|127"
    ifconfig|grep -E "([0-9]{1,3}.){3}[0-9]{1,3}"
    #创建三个文件,并且往文件中分别写入不同的代码;
    for i in `seq 1 3`;do touch jf$i.txt;echo jfedu jf$i >jf$i.txt;echo cat
    jf$i.txt;cat jf$i.txt;echo ----------;done
    5)通配符类型详解:*
    0个或者多个字符、数字;
    ?
    匹配任意一个字符;
    #
    表示注解;
    |
    管道符号;
    ;
    多个命令连续执行;
    &
    后台运行指令;
    !
    逻辑运算非;
    [ ]
    内容范围,匹配括号中内容;
    { }
    命令块,多个命令匹配。
    6)正则表达式详解:
    *
    前一个字符匹配0次或多次;
    .
    匹配除了换行符以外任意一个字符;
    .*
    代表任意字符;
    ^
    匹配行首,即以某个字符开头;
    $
    匹配行尾,即以某个字符结尾;
    (..)
    标记匹配字符;
    []
    匹配中括号里的任意指定字符,但只匹配一个字符;
    [^]
    匹配除中括号以外的任意一个字符;
    
    转义符,取消特殊含义;
    <
    锚定单词的开始;
    >
    锚定单词的结束;
    {n}
    匹配字符出现n次;{n,}
    匹配字符出现大于等于n次;
    {n,m}
    匹配字符至少出现n次,最多出现m次;
    w
    匹配文字和数字字符,不匹配符号;
    W
    w的反置形式,匹配一个或多个非单词字符,匹配
    符号;
    
    单词锁定符;
    s
    匹配任何空白字符;
    d
    匹配一个数字字符,等价于[0-9]。
    7)常用GREP工具企业演练案列:
    grep -c "test"
    jfedu.txt 统计test字符总行数;
    grep -i "TEST"
    jfedu.txt 不区分大小写查找TEST所有的行;
    grep -n "test"
    jfedu.txt 打印test的行及行号;
    grep -v "test"
    jfedu.txt 不打印test的行;
    grep "test[53]"
    jfedu.txt 以字符test开头,接5或者3的行;
    grep "^[^test]"
    jfedu.txt 显示输出行首不是test的行;
    grep "[Mm]ay"
    jfedu.txt
    匹配M或m开头的行;
    grep "K…D"
    jfedu.txt
    匹配K,三个任意字符,紧接D的行;
    grep "[A-Z][9]D"
    jfedu.txt
    匹配大写字母,紧跟9D的字符行;
    grep "T{2,}"
    jfedu.txt 打印字符T字符连续出现2次以上的行;
    grep "T{4,6}"
    jfedu.txt 打印字符T字符连续出现4次及6次的行;
    grep -n "^$"
    jfedu.txt
    打印空行的所在的行号;
    grep -vE "#|^$"
    jfedu.txt
    不匹配文件中的#和空行;grep
    --color -ra -E
    "db|config|sql" * 匹配包含db或者config或者
    sql的文件;
    grep
    --color -E "<([0-9]{1,3}.){3}([0-9]{1,3})>"
    jfedu.txt 匹配
    IPV4地址。
  • 相关阅读:
    [其他]将Windows Terminal添加到右键菜单
    [VS Code]在自己的Ubuntu服务器上构建VSCode Online
    [Go]goFileView-基于Golang的在线Office全家桶预览
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(新版本,支持WebSocket)
    [WSL]在Windows10子系统里安装运行桌面(xUbuntu)
    [Go]使用Golang对鸢尾花数据集进行k-means聚类
    [Python+JavaScript]JS调用摄像头并拍照,上传至tornado后端并转换为PIL的Image
    [Python]Python基于OpenCV批量提取视频中的人脸并保存
    [WSL]Windows10 Ubuntu子系统编译安装线程安全版LAMP
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(存在问题,已经抛弃,新解决方案请看新博客)
  • 原文地址:https://www.cnblogs.com/nshgo/p/12157674.html
Copyright © 2020-2023  润新知