一、什么是sed sed的英文全称是Stream EDitor,叫行编辑器。 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。 Sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
二、sed的使用 sed工具 用法: sed [option]... 'script' inputfile... 常用选项: -n:不输出模式空间内容的自动打印 -e: 多点编辑 -f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本 -r: 支持使用扩展正则表达式 -i: 原处编辑 script: '地址命令'
地址定界: (1) 不给地址:对全文进行处理 (2) 单地址: #: 指定的行 /pattern/:被此处模式所能够匹配到的每一行 (3) 地址范围: #,# #,+# /pat1/,/pat2/ #,/pat1/ (4) ~:步进 1~2 奇数行 2~2 偶数行
[root@wzc ~]# sed -n '2p' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin #打印某行,单引号内数字2,表示第几行
[root@wzc ~]# sed -n '1,$p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin ..... #把/etc/passwd所有行打印出来
[root@wzc ~]# sed -n '1,3p' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin #也可以指定一个范围
[root@wzc ~]# sed -n '/root/p' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin #打印包含某个字符串的行
[root@wzc date]# sed -ne '2p' -e '/root/p' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin #-e选项可以实现多点编辑
编辑命令: d: 删除模式空间匹配的行 p: 显示模式空间中的内容 a \text:在行后面追加文本;支持使用\n实现多行追加 i \text:在行前面插入文本;支持使用\n实现多行插入 c \text:替换行为单行或多行文本 w /path/to/somefile: 保存模式匹配的行至指定文件 r /path/from/somefile:读取指定文件的文本至模式空 间中匹配到的行后 =: 为模式空间中的行打印行号 !:模式空间中匹配行取反处
[root@wzc date]# cat -n passwd | sed '3d' 1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin #-d选项删除行,显示删除行以外的行
[root@wzc date]# cat -n passwd |sed '1,3d' 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8 halt:x:7:0:halt:/sbin:/sbin/halt 9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin #-d选项还可以删除指定范围的行
cat -n passwd |grep 'root'|sed '/root/d' #删除指定的字符串
s///:查找替换,支持使用其它分隔符, s@@@, s### 替换标记: g: 行内全局替换 p: 显示替换成功的行 w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
[root@wzc ~]# cat test root root root root root root root [root@wzc ~]# sed 's/root/tot/' test tot root root tot root tot root [root@wzc ~]# sed 's/root/tot/g' test tot tot tot tot tot tot tot #‘s’有替换和删除的意思,加‘g’选项是文本行中全局替换,如果不加‘g’选项只替换每行的第一个字符
[root@wzc date]# cat stu.txt ID Name PHP Linux Mysql Average 1 cangls 88 90 95 91 2 boduo 87 95 90 90.7 3 longze 85 88 87 86.7 [root@wzc date]# sed '3s/95/100/g' stu.txt ID Name PHP Linux Mysql Average 1 cangls 88 90 95 91 2 boduo 87 100 90 90.7 3 longze 85 88 87 86.7 #把第三行Linux成绩95替换成100,文件内容实际上Linux成绩还是95
[root@wzc date]# sed -i '3s/95/100/g' stu.txt [root@wzc date]# cat stu.txt ID Name PHP Linux Mysql Average 1 cangls 88 90 95 91 2 boduo 87 100 90 90.7 3 longze 85 88 87 86.7 #-i选项是把数据直接写入文件
[root@wzc date]# cat stu.txt ID Name PHP Linux Mysql Average 1 cangls 88 90 95 91 2 boduo 87 100 90 90.7 3 longze 85 88 87 86.7 [root@wzc date]# sed -e 's/cangls//g' -e 's/boduo//g' stu.txt ID Name PHP Linux Mysql Average 1 88 90 95 91 2 87 100 90 90.7 3 longze 85 88 87 86.7 #-e前面已经讲过是可以实现多点编辑,同时把‘cangls’和‘boduo’替换为空
Vim 什么是Vim Vim是一个功能强大的全屏幕文本编辑器,是Linux/Unix上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。 Vim的三种模式:命令模式、插入模式、扩展模式。
模式转换 命令模式 --> 插入模式 i: insert, 在光标所在处输入 I:在当前光标所在行的行首输入 a: append, 在光标所在处后面输入 A:在当前光标所在行的行尾输入 o: 在当前光标所在行的下方打开一个新行 O:在当前光标所在行的上方打开一个新行
插入模式 ----> 命令模式 ESC 命令模式 ----> 扩展模式 : 扩展模式 ----> 命令模式 ESC 锁定和解锁:CTRL+s,Ctrl+q
关闭文件 扩展模式: :q 退出 :q! 强制退出,丢弃做出的修改 :wq 保存退出 :x 保存退出 命令模式 ZZ: 保存退出 ZQ:不保存退出
Vim总结(表格)
| 命令模式下移动光标 | |
| h或向左方向键 | 光标向左移动一个字符 |
| l或向右方向键 | 光标向右移动一个字符 |
| j或向下方向键 | 光标向下移动一个字符 |
| k或向上方向键 | 光标向上移动一个字符 |
| Ctrl+f或者page UP键 | 屏幕向前移动一页 |
| Ctrl+b或者page DOWN键 | 屏幕向后移动一页 |
| Ctrl+d | 屏幕向前移动半页 |
| Ctrl+u | 屏幕向后移动半页 |
| + | 光标移动到非空格符的下一列 |
| – | 光标移动到非空格符的上一列 |
| N空格(n是数字) | 按下数字n然后按空格,则光标向右移动n个字符,如果该行字符数小于n,,则光标继续从下行开始向右移动,一直到n |
| 数字0或Shift+6 | 移动到本行行首 |
| Shift+4或$ | 移动到本行行尾 |
| H | 光标移动到当前屏幕的最顶行 |
| M | 光标移动到当前屏幕的中央那一行 |
| L | 光标移动到当前屏幕的最底行 |
| G | 光标移动到文本的最末行 |
| nG(n是数字) | 移动到该文本的最n行 |
| gg | 移动到该文本的首行 |
| n回车(n是数字) | 光标向下移动n行 |
| $ | 移至行尾 |
| 0 | 移至行首 |
| 命令模式下查找与替换 | |
| /word | 向光标之后寻找一个字符串名为word的字符串,当找到第一个word后,按‘n’继续搜后一个 |
| ?word | 向光标之后寻找一个字符串名为word的字符串,当找到第一个word后,按‘n’继续搜前一个 |
| :n1,n2s/word1/word2/g | 在n1和n2行间查找word1这个字符串并替换成word2,也可以把‘/’换成‘#’或‘@’ |
| :1,$s/word1/word2/g | 从第一行到最末行,查找word1并替换成word2 |
| :1,$s/word1/word2/gc | 加上c的作用是,在替换前需要用户确认 |
| 命令模式下删除、复制、粘贴 | |
| x,X | X删除光标所在处字符,X为向前删除一个字符 |
| nx(n位数字) | 向后删除n个字符 |
| dd | 删除光标所在的那一行 |
| ndd(n位数字) | 删除光标所在行的向下n行 |
| d1G | 删除光标所在的第一行所有数据 |
| dG | 删除光标所在行到末行的所有数据 |
| yy | 复制光标所在的那行 |
| nyy | 复制从光标所在行起向下n行 |
| p,P | p复制的数据从光标下一行粘贴,P则从光标上一行粘贴 |
| y1G | 复制光标所在行到第一行的所有数据 |
| yG | 复制光标所在行到末行的所有数据 |
| J | 将光标所在行与下一行的数据结合成同一行 |
| u | 还原过去的操作 |
| D | 删除光标所在处到行尾内容 |
| r | 取代光标所在处字符 |
| R | 从光标所在处开始替换字符,按ESC结束 |
| 进入编辑模式 | |
| i | 在当前字符前插入字符 |
| I | 在当前行行首插入字符 |
| a | 在当前字符后插入字符 |
| A | 在当前行行尾插入字符 |
| o | 在当前行下插入新的一行 |
| O | 在当前行上插入新在当前行下插入新的一行的一行 |
| r | 替换光标所在的字符,只替换一次 |
| R | 一直替换光标所在的字符,一直到按下ESC |
| 扩展模式 | |
| :w | 将编辑过的文本保 |
| :w! | 若文本属性为只读时,强制保存 |
| :q | 退出Vim |
| :q! | 不管编辑或未编辑都不保存退出 |
| :wq | 保存,退出 |
| :e! | 将文档还原成最原始状态 |
| ZZ | 若文档没有改动,则不存储离开,若文档改动过,则存储后离开,等同于:wq |
| :w [filename] | 编辑都的文档另存为[filename] |
| :r [filename] | 在当前光标所在行的下面读入filename文档的内容 |
| :set nu | 在每行的行首显示行号 |
| :set nonu | 取消行号 |
| n1,n2 w [filename] | 将n1到n2的内容另存为filename这个文档 |
| :! command | 暂时离开Vim运行某个Linux命令。例如:! ls /home暂时列出/home目录下的文件1,然后会提示按回车回到Vim |
原创文章,作者:RecallWzc,如若转载,请注明出处:http://www.178linux.com/32385


评论列表(1条)
文章结构清晰明了,有理论有操作,很用心哦,