--sed命令;
Linux文本处理处理三剑客之sed
--sed stream EDite
作为行编辑器,对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件,却不改变原文件
--sed工作原理
指定一个文本文件,以此读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(使用正则表达式进行匹配),对匹配后的内容进行修改(替换,删除,打印,修改,保存)
--sed用法:
Sed [参数] “sed自己独立的语法格式和语句” [文本文件]
常见选项
-n 拒接默认显示
-r 指定使用扩展的正则表达式
所有的都不要 | 或者
-e script for while if
-f 指定脚本文件
-l 指定文本换行的长度
-(i) 直接修改文件内容(不建议使用)
地址界定方式
1、 数字指定步长
Sed -n ‘1~3p’ 文件名
2、 直接匹配数值
Sed -n ‘5,7p’ 文件名
3、$ 指定行尾
Sed -n ‘10,$p’ 文件名
4、/正则/
Sed -n ‘/k{5,、}/,$p’ abc
5、0,addr
Addr可以为数字/$/正则表达式
Sed -n ‘0,/k{5,}/p’ abc
6、addr,+N
配置addr行到N行
Sed -n ‘/fd/,+5p’ abc
【Vim.代表光标所在当前行:”.,$s/^/#/”】注释
指定光标所在行下三行取消注释【vim:.,+3s/^#//】
常见命令
-p print 默认在屏幕上显示出来 建议和 -n 一起使用;
-c 替换行
Sed “/aaaa/c A” a
-d 删除
Sed “/aaaa/d” a
Sed “1,3d” a
-n -N 读取/添加 模式匹配到的行的下一行内容,再对其进行操作
-w 保存文件内容到一个新的文件
Sed “/patthen/w 新的文件名“ 原来的文件名
Sed “/k/w /tmp/aabbcc“ abc
-s 文本内容替换 默认替换模式空间匹配到第一项内容
语法格式: s/pattern/字符串/
中间的斜杠可以替换为任意一个特殊字符
-g 全部替换
1 2 和正则表达式的分组相同,实现反向应用;
指定某一个匹配项进行修改替换
& 调用前面匹配的内容(pattern)
Sed “s/r..t/&er/g“ 文件
-I 在匹配行的上一行去添加指定内容
Sed “/for/iabc” 99xfb.sh
-a 在匹配行的下一行添加指定内容
Sed “/for/aabc” 99xfb.sh
练习;
删除/boot/grub/grub.conf文件中所有空白开头的行的行首的空白字符;
Sed ‘s/^[[:space:]]+//g’ /boot/grub/grub.conf
删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
Sed ‘s/^#[[:space:]]+//’ /etc/fstab
给定一个目录,取出其目录名
--dirname -- 取出文件路径的路径部分
--base那么 -- 取出文件路径的文件名部分
给定一个目录,取出其文件名
显示菜单
Sed的高级应用
模式空间 --- 后来的 space“占有空间”