作用:
sed是Linux系统文本处理工具中的三剑客之一,它是一种流编辑器,以行为单位,能够使用正则表达式;跟其他文本处理工具模式相同,不对原文件直接操作,而是先借用一个临 时的数据缓冲区存放文文本数据,同时还有一个自己独特的空间"pattern space",我们称之为sed的模式空间,它的处理流程是:
(1)首先是逐行读取文本,放到模式空间中;
(2)判断模式空间是否被sed模式匹配到到:
(3)如果能够被sed模式匹配到要执行sed编辑命令,默认把结果输出到标准输出(stdout);
(4)如果不能够被sed模式匹配到,默认也把没有匹配到的内容输出到stdout;
(5)同时如果不执行-d命令删除模式空间中的内容时,默认会把模式空间中的内容输出到stdout
语法格式:
sed [options]…'script' [input-file]…
script:是sed模式匹配条件,也叫sed脚本,由地址定界和编辑命令组成;
(1)地址定界:指的是要操作的文本行范围;
(2)编辑命令:指的是要对匹配到的文本范围执行什么样编辑命令;
常见选项:[option
-n :不输出模式空间的内容到stdout;sed默认是要把模式空间中的内容输出到stdut;
-e 'script' :可以指定多个匹配模式条件,实现多点编辑;
-f script-file :可以把匹配模式条件写到文件中,直接引用文件读取;
-r :支持使用扩展正则表达式,模式使用基本正则表达式;
-i :直接对原文件执行编辑修改,操作非常危险,可以-i.bak,可以同时先备份以原文件跟.bak结尾的文件;
地址定界分类:
(1)空地址:
以全文匹配处理;
(2)单地址:
# :指定行号;
/pattern/ :被模式匹配到的所有行;
(3)范围地址:
#,# :指定以前一个#开头的行到后一个以#结束的行所有行;
#,+# :指定以第#开始的行在跟#个行,5,+5:表示从第五行开始在跟5行,总共匹配 11 行,包括指定开始的行;
#,/pattern/ :指定从#开头,到第一个被/pattern/匹配到的中间所有行;
/pattern1/,/pattern2/ :从第一个被/pattern1/匹配到的行开始到第一被/pattern2/匹配到的行结束中间的所有行;
(4)步进地址:
1~2:指定所有奇数行;
2-2:指定所有偶数行;
编辑命令:
d :删除地址定界指定的行
p :打印模式空间中的行输出到stdout;一般结合选项-n,效果看起来有变化;
a\string :在匹配到的地址定界行下面添加string内容,内容中使用"\n",可以实现换行;
i\string :在匹配到的地址定界行上面添加string内容,使用"\n"实现换行;
c\string :把匹配到的地址定界行替换成新行string内容;
s///或者s@@@ :在指定的地址定界中搜索指定字符并替换;其中替换标记如下
g:行内全局替换;
w /path/file :将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
r /path/file :读入其他文件的行到指定的地址定界中;
w /path/file :保存模式空间中匹配到的行至指定文件;
= :为模式空间中匹配到的行打印行号;
!:条件取反;格式:地址定界!编辑命令;
sed高级使用:sed除了有一个模式空间以外,还有一个空间叫hold space保持空间;通过命令实现模式空间与保持空间中的行来回操作,达到特定编辑功能;
sed高级编辑命令:
h :把模式空间中的内容覆盖到保持空间中;
H :把模式空间中的内容追加到保持空间中;
g :把保持空间中的内容覆盖到模式空间中;
G :把保持空间中的内容追加到模式空间中;
x :两个空间内容置换;
n :读取匹配到的行的下一行到模式空间中,匹配到行会被覆盖;
N :读取匹配到的行的下一行追加到模式空间中;匹配到行不会被覆盖;
d :删除模式空间中的行;
D :删除多行模式空间中的所有行;
vi编辑器:
它是一款强大的文本编辑工具,用在命令行模式下,其中vim是vi的升级版本,功能更加完善,其中的对系统配置定义的语法高亮检查很是实用;熟练掌握使用后,对系统管理维护工作中对文本的操作效率非常高,所有平时要注意多练习,而且vimtutor命令可以引导练习在里面操作;
1.vi模式:
编辑器也跟其他模式化文本处理工具一样,不是直接对原文件进行修改操作,先把文本数据读取到自己的vi工作空间中;其实vi有三个模式,不同模式实现的功能不同;下面介 绍:
(1)编辑模式:默认打开文件后进入编辑模式,在这里可以实现复制删除替换查找等命令;
(2)输入模式:在这里可以直接对文本进行编辑写等操作;
(3)末行模式:在这里可以使用末行模式命令对文本进去处理操作;
2.vi模式切换:
(1)编辑模式–>输入模式
i:在当前光标所在字符的前面转换为输入模式;
I:在当前光标所在行的行首转换为输入模式;
a:在当前光标所在字符的后面转换为输入模式;
A:在当前光标所在行的行尾转换为输入模式;
o:在当前光标所在行的下方插入一个新行转换为输入模式;
O:在当前光标所在行的上方插入一个新行转换为输入模式;
(2)输入模式–>编辑模式
ESC按键;
(3)编辑模式–>末行模式
输入冒号:
(4)末行模式–>编辑模式
ESC按键,快速切换可以按两下ESC按键;
3.打开文件:
语法格式
vim [options] [file ..]
vi + :打开定位文件最后一行
vi +[num] :打开文件定位到指定行
vi +/pattern :打开文件定位到第一次被模式匹配到的行;
file:注意如果实现没有这个文件,就创建这个文件为新文件,不能跟目录同名;
4.关闭文件:
(1)末行模式关闭文件
:q 退出
:q! 强制退出不保存;
:w 保存;
:w! 强制保存;
:wq 保存并退出;
:x 保存并退出;
(2)编辑模式下退出
ZZ 保存并退出;
5.在编辑模式中移动光标:
(1)逐字符移动:
h <– 向左
l –> 向右
j v 向上
k ^ 向下
注意:可以[num]h,l,j,k,指定移动多少个字符;
^
k
< h l >
j
v
(2)以单词为单位移动
w: 移至下一个单词的词首
e: 跳至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首
注意:可以[num]w,e,b,跟移动多少个单词
(3)行内跳转:
0: 绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
(4)行间跳转
gg:跳至第一行;
G:跳至最后一行;
[num]G:跳至指定行;
(5)末行模式 [num] 直接给定行号
(6)在编辑模式下翻屏
Ctrl+f: 向下翻一屏
Ctrl+d: 向下翻半屏
Ctrl+b: 向上翻一屏
Ctrl+u: 向上翻半屏
6.编辑模式下删除
(1)删除单个字符;
x:删除光标所在处的单个字符;
[num]x:指定向光标所在到向后的指定个字符;
(2)删除命令d
dd:删除当前光标所在整行
d0:删除当前光标其前到当前行首的所有字符;
d$:删除当前光标其后到当前行尾的所有字符;
dw:删除当前光标所在的单词;
[num]dw:删除当前光标向后的指定单词个数;
de:删除当前光标所在的单词包括所在其后的单词;
[num]de:删除当前光标所在的单词包括其后指定单词的个数;
db:删除当前光标所在其前的单词;
[num]db:删除当前光标其前指定的单词个数;
7.末行模式删除操作:
:startADD,endADDd
. 表示当前行
$ 表示最后一行;
+[num] 表示从当前向下指定的行数;
8.编辑模式下黏贴命令p
p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,
则粘贴至光标所在字符的后面;
P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,
则粘贴至光标所在字符的前面;
9.编辑模式下复制命令y
yy:复制当前光标所在整行
y0:复制当前光标其前到当前行首的所有字符;
y$:复制当前光标其后到当前行尾的所有字符;
yw:复制当前光标所在的单词;
[num]yw:复制当前光标向后的指定单词个数;
ye:复制当前光标所在的单词包括所在其后的单词;
[num]ye:复制当前光标所在的单词包括其后指定单词的个数;
yb:复制当前光标所在其前的单词;
[num]yb:复制当前光标其前指定的单词个数;
10.编辑模式下修改命令c:先删除内容,再转换为输入模式
cc:删除当前光标所在整行;进入输入模式
c0:删除当前光标其前到当前行首的所有字符;进入输入模式
c$:删除当前光标其后到当前行尾的所有字符;进入输入模式
cw:删除当前光标所在的单词;进入输入模式
[num]cw:删除当前光标向后的指定单词个数;进入输入模式
ce:删除当前光标所在的单词包括所在其后的单词;进入输入模式
[num]ce:删除当前光标所在的单词包括其后指定单词的个数;进入输入模式
cb:删除当前光标所在其前的单词;进入输入模式
[num]cb:删除当前光标其前指定的单词个数;进入输入模式
11.编辑模式下替换命令r
r:替换单个字符;
R:替换单个单词替换后进入输入模式
12.编辑模式下撤销命令u
u:撤销前一次编辑操作;
连续uu可撤销此前多次编辑操作
#u:撤销最近#次编辑操作;
13.编辑模式下重复前一次操作命令.
. 重复前一次编辑操作;
14.可视化光标选取模式:
v:逐字符选取;
V:矩形选取;
15.末行式下查找
/pattern 从当前光标所在处向下查找
n 对查找到的内容向下跳转
N 对查找到的内荣向上跳转;
?pattern 从当前光标所在处向上查找;
N 对查找到的内容向下跳转
n 对查找到的内荣向上跳转;
16.查找并替换在末行模式下使用s命令
ADDR1,ADDR2s@PATTERN@string@gi
$:最后一行
%:表示全文
.:表示当前行
$:表示最后一行;
#:指定行
+[num] 表示从当前向下指定的行数;
修饰符;
g:全局替换
i:忽略大小写;
17.使用vim编辑多个文件
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
:qa 部退出
18.屏显拆分
Ctrl+w, s: 水平拆分窗口
Ctrl+w, v: 垂直拆分窗口
在窗口间切换光标:
Ctrl+w, hljk
:qa 关闭所有窗口
19.分窗口编辑多个文件
vim -o : 水平分割显示
vim -O : 垂直分割显示
20.末行模式下使用w命令:
将当前文件中部分内容另存为另外一个文件;
:w
:ADDR1,ADDR2w /path/to/somewhere
21.末行模式下使用r命令:
将另外一个文件的内容填充在当前文件中
:r /path/to/somefile
22.跟shell交互
:! COMMAND
23.高级功能
1、显示或取消显示行号
显示:set nu
取消:set nonu
2.显示忽略或区分字符大小写
显示:set ignorecase
取消:set noic
3.设定自动缩进
开启:set autoindent
:set ai
关闭:set noai
4.查找到的文本高亮显示或取消
显示:set hlsearch
取消:set nohlsearch
5.语法高亮
显示:syntax on
关闭:syntax off
24.配置文件
/etc/vimrc:定义全局配置文件,对所有用户生效;
~/.vimrc :定义用户个人配置文件,只对单用户生效;
原创文章,作者:xiashixiang,如若转载,请注明出处:http://www.178linux.com/32841