Sed 文本处理工具原理及使用

Sed是一种非交互式的流编辑器,可动态编辑文件;流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
Sed本身是一个管道命令,可以分析 standard input 的,主要是用来分析关键字的使用、统计等,此外还可以将数据进行替换、删除、选中、选取特定行等功能
Sed主要用来自动编辑一个或多个文件,可以将数据行进行替换、删除、新增、选取等特定工作,简化对文件的反复操作,编写转换程序等
参数选项
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
-h或–help:显示帮助;
-V或–version:显示版本信息

sed元字符集:
^ 匹配行开始,如:/^sed/匹配所有以sed开头的行; $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行; .
匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d;
匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行; []
匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed; [^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行;
\ (…\ )匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers; &
保存搜索字符用来替换其他字符,如s/love/&/,love这成love; < 匹配单词的开始,如:/\ >
匹配单词的结束,如/love>/匹配包含以love结尾的单词的行; x{m}
重复字符x,m次,如:/0{5}/匹配包含5个0的行; x{m,}
重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行;
x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行;

测试:

  • 替换操作 ss/将要被替换的内容/替换内容/
    1、例如:将/etc/passwd下的bash替换成aaa
    在这里插入图片描述
    2、只打印被替换的行
    在这里插入图片描述
    3、文件中每一行的第一个aa替换为kk
    在这里插入图片描述
  • 全局替换
    1、将文件中所有的都替换
    在这里插入图片描述
    2、指定需要从第N处匹配开始替换时,可以使用 /Ng
    在这里插入图片描述
  • 删除:d
    在这里插入图片描述
  • 定界符
    以上命令中字符 / 在sed中作为定界符使用,也可以使用任意的定界符
    在这里插入图片描述
    定界符出现在样式内部时,需要进行转义
    在这里插入图片描述
  • 已匹配字符串标记&
    正则表达式 \word+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词
    在这里插入图片描述
    - 子串匹配标记: \ (…\ ) 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers;
    在这里插入图片描述+重复前面的字符
    在这里插入图片描述
    - 多点编辑:e(-e选项允许在同一行里执行多条命令)
    在这里插入图片描述
    上面sed表达式的第一条命令删除1至3行,第二条命令用 F 替换 f 。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
  • 从文件读入:r
    file里的内容被读进来,显示在filename里与ABCD匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面
    在这里插入图片描述
    在这里插入图片描述
  • 写入文件:w
    在filename中所有包含abc的行都被写入file里
    在这里插入图片描述
    在这里插入图片描述
    注意w具有覆盖功能,它会覆盖文件里原有的内容
  • 追加(行下):a
    将 this is a test line 追加到 以f开头的行后面
    在这里插入图片描述
    第2行之后插入
    在这里插入图片描述
  • 插入(行上)
    在这里插入图片描述
    在第6行之后插入
    在这里插入图片描述
  • 下一个:n
    如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续
    在这里插入图片描述
  • 转换:y
    #把1~10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令
    在这里插入图片描述
    - 只显示IP地址
    在这里插入图片描述
  • 去掉ssh配置文件中的带#行和空行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

练习

拷贝Week41.config文件并完成以下练习
在这里插入图片描述
1. 把Jon的名字改为Jonathan
在这里插入图片描述
在这里插入图片描述
2. 删除头3行
在这里插入图片描述
3. 打印第5~10行
在这里插入图片描述
4. 删除含有Lane的所有行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 打印所有生日在十一月或十二月的行
在这里插入图片描述
6. 在以Kare开头的行末尾加上3颗星
在这里插入图片描述
7. 将所有包含Jose的行都替换为JOSE HAS RETIRED
在这里插入图片描述
8. 把Popeye的生日改为11/14/46,假定您不知道Popeye的生日,设法用正则式查找出来
在这里插入图片描述
9. 删除所有空行

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yr137157/article/details/83546588