今天主要介绍Linux中两大文本编辑器的入门级用法:sed(stream editor)和awk
先说说sed,sed即stream editor。是一种非交互式上下文编辑器,它对源文件没有破坏性,查询中不改动源文件(但可以实现此功能),sed通过限制条件对文本进行行读取,并将读取内容贮存在内存中,根据限制内容pattern将文本由选择性的输出。sed不仅仅能够根据pattern(样式)作为约束条件,它还支持脚本导入的约束条件,这样节省了可观的键入和随之而来的错误。
下面我们来看看sed的简单用法:
sed [option] /pattern/command file…
sed [option] adr1,adr2/command file…
sed [option] script file..
command:命令不支持像选项那样可以组合使用,所以每条命令在每个语句中只能出现一次。
p:显示出所有信息,在设定显示条件的情况下匹配内容会多显示一次。
d:删除匹配内容所在的行。
a\:在指定行后添加一行或多行。
i\:在指定行前添加一行或多行。(\后为添加内容)
s:查找替换 (s/查找要替换的内容/新替换的字符串/ i不区分大小学 g 全局替换查找)
pattern支持正则表达式,与grep中的使用格式相同。
注意:在使用正则表达式时,一旦用到元字符,则该这个正则表达式必须加引号。
option:
-n 取消默认显示输出 使显示匹配内容
-e 在一个sed语句中加入多个限制条件,每个均以-e开头
-f 在-f选项后可直接跟一个脚本,sed就以此脚本导入限制条件
-i 在sed中加入该选项,将把原来对内存的
eg:
sed /关键字/ 文件目录
[root@www.linuxidc.com tmp]# sed -n /id/p /etc/inittab #若要其显示内容p命令必不可少,只显示匹配则需要-n选项
sed 地址1,地址2 文件目录 #地址信息包括:行号、字符串和正则表达式。
[root@www.linuxidc.com tmp]# sed -n 2,5p /etc/inittab #显示2~5行的所有内容
[root@www.linuxidc.com tmp]# sed -n /bug/,/bug/p /proc/cpuinfo #从带有bug字符串的第一行显示到最后一行
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
[root@www.linuxidc.com tmp]# sed -n ‘/^cache/p’ /proc/cpuinfo #以cache开头的行(正则表达式用到元字符必须加引号!)
[root@www.linuxidc.com tmp]# sed ‘/^processor/ a\#this is my cpu!’ /proc/cpuinfo # a\命令故不能在出现p命令了,i\的命令与之相同。
processor : 0
#this is my cpu!
vendor_id : GenuineIntel
….
[root@www.linuxidc.com tmp]# sed ‘1,$s/yes/YES!/g’ /proc/cpuinfo
# 查找范围1,$表示1到最后一行,s/ 匹配并替换的内容 / 新替换字段 / g表示匹配行内全局替换。
[root@www.linuxidc.com tmp]# sed ‘/^[[:space:]]*#/d’ /etc/inittab
#删除显示内容中以 0个或多个空白字符紧接#开头的行
下面说说awk,awk不仅是linux也是任何环境中现有功能最强大的数据处理引擎之一,它不仅支持简单的查找命令而且支持创建简短的程序,这些程序可以实现数据排序、处理数据、输入计算以及生成报表。与其说他是一款数据处理程序倒不如说他是一种用于文件的编程语言工具。
awk的格式:awk的命令有模式pattern和操作action组成,模式pattern由两斜杠之间的正则表达式和一个或多个awk操作符组成;操作action由括在大括号内的一条或多条语句组成,语句之间用分号隔开。注意pattern中的正则表达式两端必须加/ /,action的两端必须加{ }。具体格式如下:
[root@www.linuxidc.com ~]# awk ‘pattern{action}’ filename
awk的格式化输出:
print命令
awk默认将整个文本以换行符分成若干个record,将每record以空格分成了若干个field。
每个field分别对应$1$2$3…$n,整个record即1..n的总和为$0。
并且用一下几个内置变量来定义:
FS:输入字段分隔符,默认为空格
RS:输入行分隔符,默认为换行符
OFS:输出字段分隔符,默认问空格
ORS:输出行分隔符,默认为换行符
NF:当前记录中的字段数
NR:当前的行数
BEGIN模式
BEGIN+操作块,awk必须在输入文件在进行任何处理之前执行BEGIN后的模块.
eg:
[root@www.linuxidc.com ~]# awk ‘BEGIN{FS=”:”;OFS=”-“}{print $1,$2}’ /etc/passwd
#分析:输入文件在未执行任何操作之前,将FS和OFS分别替换,然后输出被新分隔符分割的字段 1 和 2 。
END模式
END+操作块,此模式不匹配任何输入行,而是执行任何与之关联的操作。即awk在处理完成输出前执行END+操作块。
eg:
[root@www.linuxidc.com ~]# awk ‘BEGIN{FS=”:”;OFS=”-“}{print $1,$2}END{print “show complet!”}’ /etc/passwd
#在输出结果后加入字符串show complet!
[root@www.linuxidc.com ~]# awk ‘BEGIN{FS=”:”;OFS=”-“}{print NR”:”$1,$2}END{print “show complet!”}’ /etc/passwd
1:root-x
2:bin-x
3:daemon-x
4:adm-x
5:lp-x
6:sync-x
7:shutdown-x
…
#此为print中加入NR的效果,显示了行号;并且还显示了额外字符串”: ”,print命令和C语言中的相同 输出变量时不需要家任何修饰符,输出文本内容则要加上” ”双引号。
[root@www.linuxidc.com ~]# awk ‘BEGIN{FS=”:”;OFS=”-“;RS=”;”}{print NF,$1,$2}END{print “show complet!”}’ /etc/passwd
307-root-x
show complet!
#我将换行符换成了分号”;”所以整个文档视为一条record,此时再用NF显示field的数目就显示为307(ps:以换行符计算时,我的/etc/passwd行数为51,且每行开头和结尾没有”:”,故307=51*7-50)
以上是对sed和awk两个强大文本编辑程序的入门级使用说明,他们功能之强大远不止这些,其余的高级功能将在以后的博文中陆续向大家介绍。
再向大家介绍两个小的文本排序程序:sort和uniq
sort option filename
-u 移除连续重复的行 -r 反序排序
-n 按数值大小排序
uniq option filename #相同且连续的行只显示一次
-u 只输出没有重复的行,有相同的行则不予显示
-d 只输出有重复的行 -c显示重复行重复的次数
下面向大家介绍一款强大的文本编辑器vim
在linux绝大多数文档都是以纯文本ASCII码的形式存在,而vim就是一款处理纯文本数据功能强大的编辑器。它在所有的uinx系统中都存在;其具有程序编辑功能,对语法主动会以不同颜色的字体加以区分。
vim的编辑模式:编辑模式、输入模式和末行模式。
编辑模式
vim打开文档直接进入的模式,此模式可直接对文本进行删除复制等操作;
输入模式
在编辑模式下键入i, I, o, O, a, A, r, R等任何一个字母都会进入此模式,此模式下使用键盘对文件实现文本输入。
末行模式
在编辑模式下输入:?/中的任何一个即进入此模式,在此模式下主要实现对vim进行配置和对文件进行操作以及退出编辑操作。
打开vim编辑文档:
vim filename #打开一个新文档
vim +n filename #打开一个已存在的文档,并将光标移动到文档的第n行
vim +/字符 filename #打开一个已存在的文档,并将光标移动到匹配字符上
用vim打开文档之后,即进入编辑模式,编辑模式中的常用操作:
光标跳转:左h 下j 上k 右l
词间跳转:w每次向后跳到一个单词的词首;e每次向后调到一个单词的词尾;每次向前跳到一个单词的词首;w,c,b+n表示跳跃的词数。
行内跳转:^跳到当前行的行首;$跳到当前行的行尾。
行间跳转:nG跳到第n行;gg跳到第一行;G跳到最后一行。
删除:x单字删除;dd单行删除;n+dd 以当前光标为起点,进行n行删除;
上下翻屏:ctrl+f向后翻屏;ctrl+向前翻屏;ctrl+d向后翻半屏;ctrl+u向前翻半屏。
复制粘贴:yy 光标对应行单行复制;n+yy 光标对应行往下n行复制;p 粘贴;yw 复制单词;y$ 复制光标位置到行尾。
撤销:u逐步撤销;U 全部撤销。
取消撤销:ctrl+r
. :重复上一动作。
进入可视化模式:v 单词选中;V单行选中。
窗口分割:ctrl+w,s 水平分割窗口
ctrl+w,v竖直分割窗口
ctrl+w,ctrl+w 光标在窗口之前切换
vim打开多个文件并实现多窗口
vim –o filename1 filename2 filename3 …
在编辑模式下输入“:”进入末行模式,在末行模式中可以对vim的当前工作特征进行设定:
显示行号 set nu 取消显示行号 set nonu
自动缩进 set ai 取消自动缩进 set nosi
忽略大小写 set ic 显示括号匹配 set sm (ShowMatch)
语法模式 开启 syntax on 关闭syntax off
若要使每次打开vim都有能保存配置,全局配置可以修改/etc/vimrc 用户配置修改~/.vimrc
以上就是对vim使用中,较为常用的操作的说明。