行编辑器sed与vim文本处理器

一.行编辑器sed的使用介绍

    sed英文全称stream editor,行编辑器。其工作模式为将文件中内容按行转移至sed模拟空间中,根据地址判定此行是否匹配,如果匹配,根据命令输出并打印,如果不匹配,按照默认打印到屏幕上。它的作用是根据选项和地址界定‘script’命令实现对符合相关筛选条件的行更改显示。其用法为:sed [option]... 'script' file 。

1.选项

-n:只显示匹配到的行,不匹配的行统统不显示

-e:多点编辑

-f 文件绝对路径:从指定路径文件中读取编辑脚本

-r:支持使用扩展正则表达式

-i:在原文件中编辑

只有选项无法匹配所需要的固定行,这里需要搭配地址命令‘script’选取固定范围来使用。

2.地址

地址范围的选定有时会根据正则表达式的形式匹配,常见的地址范围规定有如下:

a.单地址

#(数字):代表所匹配的固定行

/pattern/:pattern匹配的符合条件的每一行

b.无地址:对全局进行处理

c.地址范围

#1,#2:从#1行到#2行

#1,+#2:从#1开始,一直到#1+#2之间的所有行

/part1/,/part2/:从符合part1的第一行到符合part2的第一行的中间所有行

#,/part/:从第#行到符合part条件的第一行中间的所有行

d.步进表示

~:1~2代表奇数行

2~2代表偶数行   (#1~#2说白了就是选取从#1开始每隔#2-1行的所有行)

3.编辑命令

d:删除匹配行

p:显示模式空间的内容

i /test:在行前面插入test文本内容,支持使用\n进行多行插入

a /test:在行后面插入test文本内容,支持使用\n进行多行插入

c /test:替换行为test文本,也支持使用多行替换

w /path/to/somefile:保存匹配的行内容至指定文件中

r /path/to/somefile:读取指定文件内容至模式空间中匹配到的行的行后

=:将模式空间行的行数打印出来

!:模式空间匹配的行进行取反处理

基本使用方式如下所例:

1.显示文件f2中以user[0-9]命名的用户

[root@localhost testdir]# cat f21   root:x:0:0:root:/root:/bin/bash2    bin:x:1:1:bin:/bin:/sbin/nologin3   daemon:x:2:2:daemon:/sbin:/sbin/nologin4    adm:x:3:4:adm:/var/adm:/sbin/nologin5   lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin...
[root@localhost testdir]# sed -n '/user[0-9]/p' f248  user1:x:1100:1102:dafeige:/home:/bin/bash49 user2:x:1101:1101:dafeige:/home:/bin/bash

2.使用管道连接并在f2文件的第46行上,下加入“wohenshuai”的文本内容。第三个命令是将第46行内容替换成“wohenshuai”

[root@localhost testdir]# sed -n '46p' f2|sed 'a wohenshuai'46   harry:x:1004:1005::/home/harry:/bin/bash
wohenshuai
[root@localhost testdir]# sed -n '46p' f2|sed 'i wohenshuai'
wohenshuai46    harry:x:1004:1005::/home/harry:/bin/bash
[root@localhost testdir]# sed -n '46p' f2|sed 'c wohenshuai'
wohenshuai

3.取反的使用示例,这里使用!将包含非‘echo’的行显示打印

[root@localhost testdir]# cat f1
#!/bin/bash
echo "mike a temp file"
echo
mktemp /temp/test.XXXX
[root@localhost testdir]# sed -n '/echo/!p' f1
#!/bin/bash
mktemp /temp/test.XXXX

4.多点操作-e的使用:在xiaojiji文件选取含有root或两位数的行,显示打印

[root@localhost testdir]# sed -n -e '/\<[[:digit:]][[:digit:]]\>/p' -e '/root/p' xiaojiji
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
saslauth:x:991:76:Saslauthd user:/run/saslauthd:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin

4.行编辑内容的查找替换(比较常用)

‘s///’或‘s@@@’或‘s###’前两个//或@@或##之间为查询的匹配内容,后两个符号之间为替换内容,如果想要在原内容上追加内容,可以使用&表示查找的原内容。举例说明:

将文件f1中所有以#打头的行前面加上一个$符号:

[root@localhost testdir]# cat f1
#!/bin/bash
echo "mike a temp file"
echo
mktemp /temp/test.XXXX
[root@localhost testdir]# sed 's/^#/$&/' f1
$#!/bin/bash
echo "mike a temp file"
echo
mktemp /temp/test.XXXX

其中地址可以使用's@^#@$&@'或's#^\##$&#'来代替。

sed存在高级模式为h,H,G,g,x,n,D,d等,涉及到模式空间下的保持空间内容,这里不做叙述,相关内容在pdf文件中。

    二.vim编辑器的强大功能

    与nano文本编辑不同,vim作为vi的强化版文本编辑器,有着强大但众多的编辑功能,使用便利但由于编辑方式众多,不如nano简洁,所以对于初学者无法短期内熟练掌握其所有编辑方式。其操作模式分为命令模式、编辑模式、扩展命令模式三大种。其模式的转换由键盘上的固定字符执行:Esc、:、i、v。其转换关系如下图:

1.vim打开文件的方式

vim编辑器可以使用‘+’选项指定一些特定的方式进入文本模式:

vim [option]... File...

[option]:

+#:进入文本让光标停留在第#行行首

+/pattern:进入文本让光标停留在第一个匹配到pattern行的行首

+:进入文本光标停留在最后一行行首

-d file1 file2:对比file1与file2两个文件内容

-m:只读打开文件

-e:直接进入扩展命令模式

vim编辑器支持打开多个文件,vim file1 file2 file3....。并按照从左到右顺序打开,切换到扩展命令模式‘:’输入特定内容可实现文件内容的切换操作,如下所示:

:next    显示下一个文件内容

:prev    显示上一个文件内容

:first   显示第一个文件内容

:last    显示最后一个文件内容

:wall    保存所有内容

:qall    退出所有文件

:wqall   保存并退出所有文件

2.命令模式下常用的编辑命令

当不加入选项进入vim编辑模式时,光标默认停留在首行行首上。这时键盘上的字母并不能编辑内容,而分别带有特殊意义。比如h,j,k,l代表控制光标的上下左右移动,效果等同于方向键。这里选取比较常见并且方便的由命令模式编辑文件的特殊字符:

删除命令d:

d$/D:删除当前行行标至行尾所有内容

dd:删除行标所在当前行

d0:删除当前行行首至行标所有内容

d^:删除当前行非空格行首至行标内容

dw,de,db:删除当前光标单词的操作。db表示删除行标所在处单词的词首至光标的字符,dw,de表示删除光标至词尾的字符

复制命令y:

y$:复制光标至行尾内容

y0:复制行首至光标内容

y^:复制非空格行首至光标内容

Y/yy:复制当前行

粘贴命令p:

p:粘贴至当前行标下方

P:粘贴至当前行标上方

命令模式中粘贴多次字符的方式:100[i]mcgee[Esc]  其中[]内代表操作字符,[i]切换至编辑模式输入需要重复粘贴的字符,100为粘贴次数,mcgee为粘贴的字符,[Esc]键返回命令模式并执行重复粘贴操作。

改变命令c:

c:修改后切换至编辑模式

cc:删除当前行并切换至编辑模式

C/c$:删除行标至当前行尾内容并切换至编辑模式

c0:删除行首至行标内容并切换至编辑模式

c^:删除非空格行首至行标的内容并切换至编辑模式

个人常用快速跳转光标操作(必须在命令模式下):G(跳转至文本最后行)、gg(跳转至文本首行)、0(跳转至当前行行首)、^(跳转至当前行非空格行首)、$(跳转至当前行行尾)、ctrl+左右(单词跳转)。

恢复操作u:

u:恢复之前内容。(这个功能非常重要,如果发生误操作更改,使用u即可恢复之前一次操作的文本内容了)

U:撤销当前光标所在行的所有更改

2.扩展模式的常用操作

‘:’代表切换至扩展模式,比如:q,:w,:wq!等代表保存文件以及退出与强制退出等。其实扩展命令模式看来有点像输入命令,Enter键入后执行对文本内容的操作,所以可以根据正则表达式的索引范围对特定字符的匹配行进行查找,找到后可执行修改操作。比如:

:s///(@@@)(###)就与sed命令中的s///查找更改的作用一样。举例如下:

文件f1内容如下:

#!/bin/bash
echo "mike a temp file"
echo
mktemp /temp/test.XXXX
~

找寻文件中的bash,并将bash替换成csh

:s/bash/csh/g

于是文件f1内容变为如下:

#!/bin/csh
echo "mike a temp file"
echo
mktemp /temp/test.XXXX

默认情况下只匹配每行的第一个匹配字符,其中g代表匹配全局,还有i,代表忽略大小写字符匹配

在扩展模式中经常使用查找匹配的相关功能,下面介绍一些扩展模式地址匹配的界定符号:

#(数字):指定#行

#1,#2:指定#1至#2之间行         比如2,5  指2-5行

#1,+#2:指定从#1至#1+#2之间行   比如2,+3 指2-5行

.:代表当前行

$:代表最后一行,$-1代表倒数第二行,以此类推$-n...代表倒数第n-1行

%:代表全局,整个文本

/pat1/,/pat2/:第一个匹配/pat1/的行至第一个匹配/pat2/的行

/pat/支持使用正则表达式,可以与上述符号使用,如/path/,$代表匹配pat的第一行至最后一行

这些地址界定在扩展模式的使用需要遵循固定格式,要在前面使用,后面跟上输出命令,比如:

比如f2文件内容部分如下:

    33  saslauth:x:991:76:Saslauthd user:/run/saslauthd:/sbin/nologin34  libstoragemgmt:x:990:988:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin35  pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin36  gdm:x:42:42::/var/lib/gdm:/sbin/nologin37  gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin38  avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin39  sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin40  postfix:x:89:89::/var/spool/postfix:/sbin/nologin41  ntp:x:38:38::/etc/ntp:/sbin/nologin

前面是个人使用echo重定向输入的行号,便于观察者理解。现在使用扩展模式删除36-39行的所有字母字符,如下操作:

:36,39s/[[:alpha:]]*//g

于是文本内容变为:

    33  saslauth:x:991:76:Saslauthd user:/run/saslauthd:/sbin/nologin 34  libstoragemgmt:x:990:988:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin 35  pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin 36  ::42:42::///:// 37  --::989:984:://--/:// 38  ::70:70: /- :///-:// 39  ::74:74:- :///:// 40  postfix:x:89:89::/var/spool/postfix:/sbin/nologin 41  ntp:x:38:38::/etc/ntp:/sbin/nologin 42  tcpdump:x:72:72::/:/sbin/nologin

3.可视化模式VISUAL

命令模式下v键切换至visual模式,结合d,y,p等命令,可以对选定的块进行操作,举例说明:

v键进入可视化模式,还是使用f2文件:

~
~
-- VISUAL --

光标选定块如图:

按d删除,如下:

这里需要注意的是光标停留位置很重要,以这个位置为分隔符,可以向前或者后面内容进行移动,达到随意选取的功能。

转载于:https://blog.51cto.com/11852056/1836215

magedu_20160808相关推荐

最新文章

  1. java中的Executors简介与多线程在网站上逐步优化的运用案例
  2. 芯片巨人也要搞医疗?
  3. DIP第三章习题解答
  4. 为什么安装Android SDK后无法安装flatform?
  5. 【CyberSecurityLearning 20】xu ni zhuan yong wang luo
  6. Ubuntu + pip + Python3 + CPU版本 PaddlePaddle 安装
  7. java 字段为空设置默认值_java – 当字段为空时使用MyBatis添加默认值
  8. 分治应用--最近点对问题 POJ 3714
  9. python api数据接口_python写数据api接口
  10. python分类算法的应用_Python基于sklearn库的分类算法简单应用示例
  11. db2 存储过程异常处理
  12. xp mysql字符集与乱码_MySQL乱码的原因和设置UTF8数据格式的方法介绍-mysql教程-学派吧...
  13. 【mysql乱码】解决php中向mysql插入中文数据乱码的问题
  14. 程序员工作交接文档怎么写_IT交接事项.doc
  15. python分层抽样_抽样方法—分层抽样
  16. python时钟编程教程_编程入门16:Python时间操作
  17. 安装RAC小记(Oracle11gR2)
  18. 主板没有rgb接口怎么接灯_DIY只为玩游戏?主板配上RGB灯让机箱发光
  19. 2022年K1刷第三方固件教程
  20. 北京医院科室强项实力排行榜

热门文章

  1. 自己整理的一些《深入理解Java虚拟机》的知识点
  2. 中国有哪些不错的开源软件产品?
  3. SQL2005常见问题及解决办法汇总
  4. vue实现边框线拖拽效果(拖动元素边框改变宽度)
  5. udi12154 oracle12154,远程连接Oracle ora-12154
  6. matlab中枝切法解包裹,一种基于改进枝切法的激光散斑相位解包裹方法与流程
  7. 基于Matlab的剪切干涉仪仿真模拟
  8. Alarils PK 靶控注射泵各药物药代动力学模型参数
  9. Unity3D优化问题
  10. 商业地产如何走出高空置率困局?