linux文本编辑器

       在linux下常用的文本编辑器有vi,grep,awk和sed,其中vi属于交互式文本编辑器,而grep,awk和sed属于非交互式编辑器。这段时间一直在写shell脚本,经常与非交互式文本编辑器打交道,下面我就谈谈对非交互式文本编辑器的认识,总结一下,有误的地方请朋友们多指正。

       不知道曾经的你在刚刚接触到这些文本编辑器时纠结过这三个的区别没,反正我是刚刚接触是一直想法子找出他们的区别,在这里我想告诉有与我同样情节的朋友们一句话,就像面向对象语言的C++和java,没有必要区别他们的好与坏,既然存在就有存在的道理,大家相互借鉴发展而已。

 

Grep:在一个或多个文件中搜索字符串,如果待搜索字符串包括空格,则必须被双引号括起,搜索的结果被送到屏幕,不影响原文件内容。

格式:grep 待搜索字符串 input-file

含义:在文件input-file中搜索“待搜索字符串”的内容并输出到屏幕

 

Awk:最基本功能是在文件或字符串中基于指定‘匹配模式’浏览和抽取信息,awk抽取信息后,对抽取信息进行‘{操作}’,awk通常用来格式化文本文件中的信息或获取特定的字段(列)。

格式:awk [-F separator]‘匹配模式{操作}’input-file

含义:对file文件内容逐行的按“匹配模式”进行“{操作}”

说明:[-F域分隔符]是可选的,awk默认使用空格分隔,因此如果要浏览域间有空格的文本,不必指定这个选项,但如果浏览如passwd文件,此文件各域使用冒号作为分隔符,则必须使用-F选项:   

awk -F : '匹配模式{操作}' input-file


Sed:是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,接着用sed‘操作命令’处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出,常用的三种格式如下:

格式一:sed ‘操作指令’ input-file

含义:对input-file文件逐行按“操作指令”进行操作并将input-file全文(包括经过操作指令而改变的行和未改变的行)输出到屏幕,input-file内容是未变的;

格式二:sed -n ‘操作指令’ input-file

含义:对file文件逐行按“操作指令”进行操作并只将input-file文件中那些改变的行输出到屏幕,input-file内容是未变的;

格式三:sed -i ‘操作指令’ input-file

含义:对input-file文件逐行按“操作指令”进行操作并将input-file全文(包括改变的行和未改变的行)输出到屏幕,input-file内容是改变的,相当于直接对file原文进行操作;

 

操作指令的基本格式: [addr1[,addr2]] Function

    说明:sed的编辑指令均由位址(address)与函数(function)两部份组成,其中,addr1和addr2用来指定修改的范围(从第addr1行到第addr2行,当然也可以用'/Pattern/'来匹配指定行),他们不一定必须指定,在执行时,sed 利用它的位址参数来决定编辑的对象;而用它的函数参数对其编辑。

    Function有以下值:

    (1).插入

       String:表示当前行前面插入一行,内容为String

    (2).删除

        d:表示将指定的行删除

    (3).替换

        s/Find_String/Replace/:表示用Replace替换Find_String

    (4).打印

        p:表示将选择的行打印出来

 

Demo:

1. sed -i '/hot_standby/s/^#/ /;/hot_standby/s/=.*$/= on/' file

    sed -i '/hot_standby *=/s/^#/ /;/hot_standby *=/s/=.*$/= on/' file 

含义:在文件file内模式匹配hot_standby行后去掉注释符#并赋值hot_standby= on;注意在第二个方式中hot_standby与*之间有一个空格,采用这样方式以避免配置文件中如有值为hot_standby的也被替换为on。


 小结:上面三种非交互式的脚本编辑工具正是按其“出生”的时间顺序进行描述的,从其功能上我们可以发现后面出现的借鉴前面已有的功能,因此也就越完善、功能越强大,甚至前面能实现的功能后面的都能实现(如:awk实现的功能sed基本上也能实现)。

 

 

vi编辑块选择(Visual Block)

Vi的大部分命令都是以行为单位的,有时候想要删除、粘贴或复制特定区域,那么如何搞定一块范围呢?

一般模式下,块选择的按键意义

v

字符选择,将光标经过的字符选择

V

行选择,将光标经过的行选择

[Ctrl]+v

矩形选择,可以用矩形的方式选择数据

y

将选中地方复制起来

d

将选中地方删除

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值