shell 脚本——第七节课 三剑客之sed语句

sed命令
  Linux文本处理三剑客 之 sed
  sed stream EDite
    作为行编辑器,对文本进行编辑(以行为单位进行编辑)
    注意:sed编辑文件,却不改变原文件;

  sed的工作原理:
    指定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改、保存等)

  用法:
    sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    sed [参数] “sed自己独立的用法格式的语句”[文本文件]

  常见选项
    -n 拒绝默认显示
    -r 指定使用扩展的正则表达式
      匹配IP
      1、所有的 \ 都不要 2、 | 或者
    -e script for while if
    -f 指定脚本文件
    -l 指定文本换行的长度?
    -i 直接修改文件内容(不要使用)

  地址定界方式
    1、直接匹配数值
      sed -n ‘5p‘ 文件
    2、 d~步长
      sed -n ‘1~3p‘ 文件
    3、$ 指定行尾
      sed -n ‘10,$p‘ 文件
    4、/正则/
      /正则1/,/正则2/
        sed -n ‘/k\{5,\}/,$p‘ abc
        sed -n ‘/\(fd\)\+/,+2p‘ abc ? 正则写在前面就没有问题,写在后面就有问题
        sed -n ‘
    5、0,addr
      addr 可以为 数字/$/正则表达式
      sed -n ‘0,/k\{5,\}/p‘ abc
    6、addr,+N
      配置addr行到,addr后N行
      sed -n ‘/fd/,+5p‘ abc

  **常见命令
    p print 打印(默认在屏幕上显示出来) 建议和 -n 一起使用;
    c 替换
      sed "/aaa/c \A" a
    d 删除
      sed "/aaa/d" a
      sed "1,3d" a
    n N 读取/添加 模式匹配到的行的下一行内容,再对其进行操作
    w 保存文件内容到一个新的文件
      sed "/patthen/w 新的文件名" 原来的文件名
      sed "/k/w /tmp/aabbcc" abc
    *s* 文本内容替换,默认替换模式空间匹配到的第一项;
      语法格式: s/pattern/字符串/
        中间的 / 可以替换为任意一个特殊字符 例如:s### [email protected]@@ s%%%%
      g 全部
      \1 \2 和正则表达式的分组相同,实现反向应用;
        指定某一个匹配项进行修改替换
      & 调用前面(pattern)匹配的内容
        sed "s/r..t/&er/g" 文件
      w
      p

  sed的高级应用
    模式空间 -- hold space"占有空间"

  练习:
    删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
      sed ‘s/^[[:space:]]\+//g‘ /boot/grub/grub.conf
    删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行 的行首的#和空白字符;
      sed ‘s/^#[[:space:]]\+//g‘ /etc/fstab
    给定一个目录,取出其目录名
      echo "/etc/passwd" | sed ‘s/[^/]\+$//‘
    给定一个目录,取出其文件名
      echo "/etc/passwd" | sed ‘s#^/.*/\(.*\)##

    /var/log/message
      sed ‘/[^/]\+/‘

      dirname -- 取出文件路径的路径部分
      basename -- 取出文件路径的文件名部分

原文地址:https://www.cnblogs.com/zwl123456/p/11441967.html

时间: 2024-07-31 19:16:22

shell 脚本——第七节课 三剑客之sed语句的相关文章

shell 脚本——第六节课 if判断语句

if语句: if条件语句的使用格式: 1.单分支语句 if 条件;then 执行语句 fi 2.双分支语句 if 条件;then 执行语句1 else 执行语句2 fi 3.多分支语句 if 条件;then 执行语句1 elif;then 执行语句2 elif;then 执行语句3 else 执行语句4 fi 退出码: exit 在某些条件判断下,如果不满足该条件,我们必须手动退出程序,否则后面的代码无法执行: 代码正确执行完成后,我们制定 exit 0 为正确退出码: 1.判断/etc/ini

centos mysql 优化 第七节课

centos mysql  优化  第七节课 f

Linux学习第七节课(2019.9.20)

今晚第七节课,老刘讲了文件的特殊权限SUID,SGID,SBIT,文件的隐藏设置chattr以及隐藏文件的查看lsatrr:文件访问控制列表设置setfacl以及文件访问控制的查询getfacl:切换用户命令su以及sudo命令执行权赋予用户的命令:最后讲了第六章的开头linux的目录.这周报考了,突然有点压力,哈哈,希望顺顺利利,11月1日考过红帽rhsca以及rhce.老刘网站:linuxprobe.com 原文地址:https://blog.51cto.com/14523487/24398

C#第七节课

//正文之前先吐槽(助教跳过这段啊我前面都注释了)...这学期的12周之后算了算好像还蛮闲的...12周之前...尤其是现在到12周...一顿大作业一顿大作业...还有新开的课还有期末..还有acm集训...学弟学妹要是看到博客记得...C#与Android不可兼得...少选课保平安...何苦为难自己...好了吐槽结束 上周讲了很多...感觉进度又加快了一些...我就说说课后自己又重现的老师提起过的知识吧.正好这个五一除了acm集训就在写C#的大作业,所以这节课就着重说一些实验中的问题以及实验和

shell脚本(七)

j.数组 #关联数组:,一般的数组索引必需是数值,而关联数组索引可以是字符串 #也可以是数值,与python的字典类似 awk 'BEGIN {str[name]="string";str[1]="1"};printf("%s\n%s\n",str[name],str[1])} #split函数,注意for(i in name)输出是随机的 awk -F: '{split($0,name,":");for(i in name)

shell脚本知识(三) 正则表达式 grep sed awk

1.正则表达式 匹配给定文本中的所有单词:( ?[a-zA-Z]+ ?) ?用于匹配单词前后可能出现的空格. 匹配IP地址:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}   括号分割的4个整数. 2.grep "mach_text"  file1 file2 file3-. 递归搜索文件: grep "text" ./ -Rn 3.cut  将文本按列进切分.可以指定分割每列的定界符.在cut术语中,每列一个字段. c

2015-09-28 第七节课 (js简介、声明变量、数据类型)

vs新建步骤 文件——新建项目——web——空白web应用程序——取名.位置.确定——此时软件会自动生成一个sln文件(解决方案),一解决方案下面可以有多个项目. 点击项目——新建文件夹css和js和image——新建html页面取名demo1 (推荐设置:工具——选项——可以设置下字体和颜色:文本编辑器——把常用的几种语言设上行号颜色提示) 什么是Javascript ? Javascript 是一种脚本语言,是一种脚本语言,结构简单,使用方便,其代码可以直接放入HTML文档中,可以直接在支持

centos mysql 实战 第七节课

mysql常见错误排查 1. client工具mysqlsqlyogmysqldump(mysqlbinlog) 2. mysql binlog 介绍 mysql 命令 mysql command not found 环境变量 echo $PATH 用绝对路径来调用/usr/local/mysql/bin/mysql ===============================================啊铭去除环境变量\cp = /bin/cp\cp 2.txt eee/# cd eee

第七节课:字典

字典是无序的,它不能通过偏移量来索引,只能通过键来存取. 字典= {'key':value} key:类似我们现实的钥匙,而value则是锁.一个钥匙开一个锁. 特点:内部没有顺序,通过键来读取内容,可嵌套,方便我们组织多种数据结构,并且原地修改里面的内容,属于可变类型. 组成字典的键必须是不可变的数据类型,比如 数字.字符串,元组等. 列表是可变对象不能作为键. 键是字符串:info = {'a':1,'b':2}键是数字: info2 = {1:'a',2:'b'}键是元组: cinfo =