笔记05:grep、正则表达式、vim

来源:

	第5章:

笔记:

	Linux文本处理三剑客:
		grep:文本过滤工具;grep,egrep,fgrep;
		sed:文本编辑工具,行编辑器,流处理编辑器;
		awk:文本报告生成器,是一门编程语言,Linux上的实现是gawk;
  • grep:Global search REgular expression and Print out the line;

     		作用:文本搜索工具,根据用户给出的模式对指定的文件进行逐行匹配检查,打印匹配到的行;
     		
     		REGEXP:正则表达式,分BRE(基本正则表达式)和ERE(扩展正则表达式);
     				由具有特殊意义的字符和一般字符组成,达到控制和通配的作用;
     				egrep,grep -E:使用ERE;
     				选项:
     					-v:显示为匹配到的项;
     					-o:仅显示匹配到的字符串而非整行;
     					-i:匹配时忽略字符大小写;
     					-P:使用perl regexp;
     					-E:使用ERE;
     					-q:不打印任何内容;
     					--color-auto:将匹配字符串高亮显示;
     					-A #:after,显示匹配行及其后#行内容;
     					-B #:before,显示匹配行及其前#行内容;
     					-C #:context,显示匹配行及其前后#行内容;
     				元字符:
     					字符匹配:
     						. :任意单个字符;
     						[]:范围内的任意单个字符;
     						[^]:范围外的任意的单个字符;
     							[[:digit:]],[[:lower:]],[[:upper:]],[[:alpha:]],
     							[[:punct:]],[[:alnum:]],[[:space:]]
     					次数匹配:
     						*:前面字符任意次;
     						\?:前面字符0或1次;
     						\+:前面字符至少1次;
     						.*:任意个任意字符;
     						\{m\}:前面字符m次;
     						\{m,n\}:前面字符最少m次,最多n次;
     							\{0,m\}:前面字符至多m次;
     							\{m,\}:前面字符至少m次;
     					位置锚定:
     						^:锚定行首;
     						$:锚定行尾;
     							^$:空行;
     							^[[:space:]]*$:无任何可视字符的行;
     						\<或\b:锚定词首;
     						\>或\b:锚定词尾;
     							\<pattern\>:匹配整个单词;
     					分组和后向引用:
     						\(\):将括号内模式匹配到的多个字符看做整体并保存于变量中,以方便引用;
     						后向引用:\1,\2,。。。;引用前面分组中所匹配到的字符而非模式;
     						NOTE:\(\(\)\)...
     							分组括号中匹配到的内容会被正则表达式引擎保存于内部变量中,
     							如\1,\2,\3。。。。
     								\1表示:分组中第一个左括号及对应的右括号之间匹配到的内容;
     								\2表示:分组中第二个左括号及对应的右括号之间匹配到的内容;
     								以此类推;;;
     		ERE:Extended REgular expression
     			字符匹配(同BRE):
     				.:单个任意字符;
     				[]:范围内的单个字符;
     				[^]:范围外的单个字符;
     			次数匹配(“\”被去掉了):
     				*:任意次数
     				+:一次或多次;
     				?:0次或1次;
     				{m}:m次
     				{m,n}:m到n次;
     					{m,}:至少m次;
     					{0,m}:至多m次;
     			位置锚定(同BRE):
     				^:行首;
     				$:行尾;
     				\b或\<:词首;
     				\b或\>:词尾;
     			分组(‘\’被去掉了):
     				()
     				后向引用:\1,\2,。。。
     			或者:|
     				(a|b):用小括号,中括号有些情况会造成语义混乱;
     		fgrep:不支持正则表达式;
    
  • vim编辑器:

     	一个全屏的文本编辑器:
     		+#:打开文件直接处于第#行的行首;
     		+:打开文件直接处于末行行首;
     	编辑模式:
     		进入输入模式:i,a,o,c,I,A,O,C
     		光标跳转:h,j,k,l,e,b,w,G,gg,(ctrl+f),(ctrl+d),(ctrl+u),(ctrl+b),d
     				,dd,x,(,),xp,y,yy,p,r
     		Note:
     			p:粘贴内容为整行时,贴在光标所在行下方;粘贴内容非整行时,贴在光标
     				后面;
     			P:粘贴内容为整行时,贴在光标所在行上方;粘贴内容非整行时,贴在光标
     				前面;
     			zz:保存并退出
     			c:删除内容并进入输入模式,用法同d
     			u:撤销操作,#u(撤销多次操作)
     			.:重复前一次的操作;
     			v:按字符选定;
     			V:按行选定;
     	末行模式:
     		地址定界:后面跟上相应操作符
     			#:第#行;
     			m,n:第m到n行;
     			.:当前行;
     			$:末行;
     				m,$-n:第m行到倒数第n行;
     			%:全文,同1,$;
     			/parttern1/,/parttern2/:第一次被模式1匹配的行至第一次被模式2匹配的行之间的行;
     				m,/pattern/或/pattern/,m
     		末行模式操作符:
     			r file:读取文件到指定位置,可配合地址定界使用:#r file;
     			w file:保存内容到指定文件,可配合地址定界使用;
     			d:删除内容,可;
     			y:复制内容:可;
     			x,w,q,a,!,?,/
     			s/parttern/context/:查找内容并替换,可;(context不能使用模式,但能使后向引用)
     				i:忽略大小写
     				g:全局替换(默认替换每行第一个匹配的内容)
     				“/”可变更:如@,#等
     				context中:&表示前面模式匹配到的全部内容,\1。。。表示引用前面模式中的分组;
     	多文件模式:vim file1 file2 。。。
     		:next:切换至下个文件;
     		:prev:切换至上个文件;
     		:first:切换至第一个文件;
     		:last:切换至最后一个文件;
     	多文件窗口分割:vim -o|O file1 file2 。。。
     		-o:水平分割;
     		-O:垂直分割;
     		ctrl+w,arrow:窗口切换;
     	单文件窗口分割:
     		crtl+w,s:水平拆分;
     		crtl+w,v:垂直拆分;
     		ctrl+w,arrow:窗口切换;
     	定义vim的工作特性:
     		1、vim的配置文件:永久生效
     			/etc/vimrc,~/.vimrc(不存在时可手动创建)
     		2、末行模式设定:当前vim进程生效
     			行号:
     				set number(nu),set nonumber(nonu);
     			括号匹配:
     				set showmatch(sm),set noshowmatch(nosm);
     			高亮搜索:
     				set hlsearch,set nohlsearch;
     			自动缩进:
     				set ai,set noai;
     			高亮语法:
     				syntax on,syntax off;
     			忽略大小写:
     				set ic,set noic;
     	获取vim的使用帮助:
     		toolfk,man vim,man vimrc,:help,google;
    

练手:

1、显示/proc/meminfo文件中以大小s开头的行(要求使用两种方式);
2、显示/etc/passwd文件中不以/bin/bash结尾的行;
3、显示/etc/passwd文件中ID号最大的用户的用户名; 
4、如果用户root存在,显示其默认的shell程序;
5、找出/etc/passwd中的两位数或三位数;
6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;
7、找出‘netstat -tan’命令的结果中以‘LISTEN’后跟0、1或多个空白字符结尾的行;
8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);
	而后找出/etc/passwd文件中用户名同shell名的行;
9、显示当前系统root、centos或user1用户的默认shell和UID;
10、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
11、使用echo输出一绝对路径,使用egrep取出其基名;
12、找出ifconfig命令结果中1-255之间的数据;
13、找出ifconfig命令结果中的IP地址;
14、复制/etc/grub2.cfg至/tpm/目录中,用查找替换命令删除/tpm/grub2.cfg文件中的行首的空白符;
15,复制/etc/rc.d/init.d/functions文件至/tpm目录中,用查找替换命令为/tpm/functions的每行
	开头为空白字符的行行首添加一个#号;
16、复制/etc/init.d/functions文件至/tmp目录,替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
17、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;

Tip:

	1、CentOS 6和CentOS 7中shutdown命令的执行方式不同?
	2、command:dirname、basename

猜你喜欢

转载自blog.csdn.net/a904441024/article/details/86240790