grep,cut,wc,sort,diff,uniq,patch命令

文本处理工具:

	Linux上文本处理三剑客:
		grep,egrep,fgrep: 文本过滤工具(模式: pattern)工具;
			grep:基本正则表达式,-E,-F
			egrep:扩展正则表达式,-G,-F
			fgrep:不支持正则表达式,
		sed: stream editor,流编辑器;文本编辑工具;
		awk: Linux上实现为gawk,文本报告生成器(格式化文本);

		正则表达式:regual expression , regexp
			由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义,而是用于表示控制或通配的功能;
				分两类:
					基本正则表达式:BRE
					扩展正则表达式:ERE

			元字符: \(hello[[:space:]]\+\)\+

grep: global search regular expression and print out the line
	作用: 文本搜索工具,根据用户指定的"模式(过滤条件)" 对目标文本逐个进行匹配检查;打印匹配到的行;
	模式:由正则表达式的元字符及文本符所编写出的过滤条件;

	正则表达式引擎:

	grep [option] pattern [file]
	grep [option] [-e pattern | -f file] [file...]

		options:
			--color=auto: 对匹配到的文本着色后高亮显示;
			-i: ignorecase,忽略字符大小写;
			-o: 仅显示匹配到的字符本身;
			-v,--invert-match: 显示不能被模式匹配到的行;
			-E: 支持使用扩展的正则表达式元字符;
			-q,quiet,--slience: 静默模式,即不输出如何信息;

			-A # : after,在后#行
			-B # : before,在前#行
			-C # : context,前后各#行

		基本正则表达式元字符:
			字符匹配:
				.:匹配任意单个字符;
				[]:匹配指定范围内的任意单个字符;
				[^]:匹配指定范围外的任意单个字符;
					如:[:punct:],[:alpha:];[:alnum:]#文字数字字符;[:alpha:]#文字字符;
			匹配次数:用在要指明其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
				*: 匹配其前面的字符任意次;0,1,多次;
					例如: grep "x*y"
						abxy
						aby
						xxxxy
				.*:	匹配任意长度的任意字符;
				\?: 0次或1次;
				\+: 1次或多次;
				\{m\}: m次;
				\{m,n\}: 至少m次,至多n次;

			位置锚定:
				^: 行首锚定;用于模式的最左侧;
				$: 行尾锚定的最右侧;
				^pattern$ : 用于pattern来匹配整行;
					^$: 空白行;
					^[[:space:]]*$: 空行或包含空白字符的行;
				单词:非特殊字符组成的连续字符(字符串)都称为单词;

				\< 或 \b : 词首锚定;用于单词模式左侧;
				\> 或 \b : 词尾锚定;用于单词模式右侧;
				\<pattern\>: 匹配完整单词;

			练习:
				1. 显示/etc/passwd文件中不以/bin/bash结尾的行;
					[[email protected] ~]# grep -v "/bin/bash$" /etc/passwd
				2. 找出/etc/passwd文件中的两位数或三位数;
					[[email protected] ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
				3. 找出/etc/rc.d/rc.sysinit或 /etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行;
					[[email protected] ~]# grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg
				4. 找出"netstat -tan"命令的结果中以‘LISTEN‘后跟0,1或多个空白符结尾的行;
					[[email protected] ~]# netstat -tan | grep "LISTEN[[:space:]]*$" 

			分组及引用:
				\(\):将一个或多个字符捆绑在一起,当做一个整体进行处理;
					如: \(xy\)*ab
				Note: 分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部变量中,这些变量为;
					\1: 模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
					\2: 模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
					\3
					...

					如: he loves his lover.
						he likes his lover.
						she likes her liker.
						she loves her liker.
					]# grep "\(l..e\).*\1" /PATH
egrep: grep -E
	支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E

	grep [OPTIONS] PATTERN [FILE...]
		选项:
			-i,-o,-v,-q,-G(基本正则表达式),-A,-B,-C
		扩展正则表达式的元字符:
			字符匹配:
				.:任意单个字符
				[]:指定任意范围内的单个字符
				[^]:指定范围外的任意单个字符

			次数匹配:
				*:其前字符任意次,即0,1或多次;
				?:0次或1次,即其前字符是可有可无的;
				+:其前字符至少1次;1次及以上;
				{m}:
				{m,n}:
					{0,n}
					{m,}
			位置锚定:
				^:行首锚定
				$:行尾锚定
				\<,\b:
				\>,\b:
			分组及引用:
				():分组;括号的模式匹配到的字符会被记录于正则表达式引擎的俄内部变量中;
				后项引用;\1,\2,...
			或
				a|b:a或b
					C|cat: C或cat
					(c|C)at: cat 或 Cat

		练习:
			1.找出/proc/meminfo文件中,所有在大小写S开头的行;至少有三种实现方式;
				[[email protected] ~]# grep -E "^(s|S)" /proc/meminfo
				[[email protected] ~]# grep -E "^[sS]" /proc/meminfo
				[[email protected] ~]# grep "^[sS]" /proc/meminfo
				[[email protected] ~]# grep -i "^s" /proc/meminfo
			2.显示当前系统上root,centos或user1用户的相关信息;
				[[email protected] ~]# egrep "^(root|centos|user1)\>" /etc/passwd
			3.找出/etc/rc.d/init.d/functions文件中某个单词后面跟一个小括号的行;
				[[email protected] ~]# grep -E "[[:alpha:]]+\(\)" /etc/rc.d/init.d/functions
			4.使用echo命令输出一绝对路径,使用egrep取出基(路径);
				[[email protected] ~]# echo /etc/sysconfig | egrep -o "[^/]+/?$"
			5.找出ifconfig命令结果中的1-255之间的数值;
				[[email protected] ~]# ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
			6.找出ifconfig命令结果中的IP地址;(有效ip地址:1.0.0.1--223.255.255.254)
				[[email protected] ~]# ifconfig | egrep "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>"
			7.添加用户bash,testbash,basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;
				[[email protected] ~]# cat /etc/passwd | egrep "^([^:]+\>).*\1$"
				[[email protected] ~]#  egrep "^(\<[^:]+\>).*(\1)$"  /etc/passwd

fgrep: 不支持正则表达式元字符;
	当无需要用到元字符去编写时,使用fgrep必然更好;

文本查看及处理工具:wc ,cut ,sort ,uniq , diff,patch

	wc:		单词统计;
		wc [OPTION]... [FILE]...
			-l:lines行
			-w:words字
			-c:bytes字节
			-m:chars字符数,不可与-c同用
			-L:打印最长行的长度

	cut:	文本截取
		cut OPTION... [FILE]...
			-d CHAR: 以指定的字符为分隔符;
			-f FIELDS: 挑选出的字段;
				#  : 指定的单个字段;
				#-#: 连续的多个字段;
				#,#: 离散的多个字段;

	sort:	排序
		sort OPTION... [FILE]...
			-n:基于数值大小而非字符进行排序;
			-t CHAR:指定分隔符;
			-k#:用于排序比较的字段;
			-r:逆序排序;
			-f:忽略字符大小写
			-u:重复内容只保留一次;
				重复行:连续且相同;

	uniq:	报告或移除重复的行
		uniq [OPTION]... [INPUT [OUTPUT]]
			-c: 统计显示每一行出现的次数;
			-u: 仅显示不重复的行;
			-d: 仅显示重复的行;

	diff:	比较不同
		diff [option]...FILES..

		diff /PATH/oldfile  /PATH/newfile > /PATH/PATH_file
			-u: 使用unfied 机制,即显示要修改的行上下文,默认为3行;

	patch:	向文件打补丁
		patch [option] -i /PATH/PATH_file  /PATH/oldfile

		patch /PATH/oldfile < /PATH/PATH_file

	练习:
		取出ifconfig命令结果中ip地址;

  

原文地址:https://www.cnblogs.com/liuyuanq/p/10014755.html

时间: 2024-10-03 01:07:14

grep,cut,wc,sort,diff,uniq,patch命令的相关文章

iconv,enconv,enca,convmv,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令

1.在Vim中查看文件编码 :set fileencoding 即可显示文件编码格式. 如果你只是想查看其它编码格式的文件或者想解决 用Vim查看文件乱码 的问题,那么你可以在 ~/.vim rc 文件中添加以下内容: set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936 这样,就可以让vim自动 识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用l

文本处理命令- cat more less cut wc sort uniq

文本处理命令 cat more less cut wc sort uniq 1.cat  cat主要功能:1.一次显示整个文件. cat filename2.从键盘创建一个文件. cat > filename   (只能创建新文件,不能编辑已有文件). 1 [[email protected] ~]$ cat > test.txt 2 this is a test for cat command.^[[D 3 a 4 b 5 cc 6 de 其中^[[D是向左的箭头,本想回退一格编辑,但很可惜

几个常用文本处理小工具tr ,wc,cut,sort,uniq用法详解

几个文本处理的小工具:tr ,wc,cut,sort,uniq 1. tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大. 语法:tr 选项  SET1 SET2 -c或--complerment:取代所有不属于第一字符集的字符(就是补集): -d或--delete:删除所有属于第一字符集的字符: -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示: -t或--truncate-set1:先删除第

文本处理cut、sort、uniq、paste正则表达式

文本处理cut.sort.uniq.paste正则表达式 1 cut 按列抽取文本 cut -d DELIMITER -f FILEDS .example,cut -d: -f1,用-d:冒号位分割符,用f1取第一列. [[email protected] ~]#cut /etc/passwd -d: -f 7 /bin/bash /sbin/nologin /sbin/nologin /sbin/nologin /sbin/nologin 1.2 paste -d : f1 f2 两个文件行号

&lt;转载&gt; diff 和 patch 命令

本文转载自:http://blog.chinaunix.net/uid-23390992-id-3312321.html diff与patch命令 diff与patch命令真可谓是天作之合,命令中的黄金搭档.老师讲了之后其实自己不是很懂,因为上课的时候没有好好听,上课走神了.怎么办呢,肯定不能放着不管了,而这两个命令确实很重要,所以只能厚着脸皮课后死啃资料自己学习咯,学了之后才有开头第一句的感慨. diff和patch是一对工具,数学上说,diff是对两个集合的差运算,patch是对两个集合的和

Linux中的版本控制---diff和patch命令

一.构造两个用于测试的文件 hello.txt: world.txt: 二.用diff命令比较两个文本文件的差异 对这个两个文本文件执行diff‘命令,并通过输出重定向,将差异保存在diff.txt文件中 $ diff -u hello.txt world.txt > diff.txt 参数-u是使得差异输出中带有上下文 第1,2行中的三个减号标识原始文件,三个加号标识目标文件: 第3行表示在这个差异小节中,是从原始文件的第1行开始之后的3行,目标文件从第1行到第3行: 从第4行开始的减号表示只

cut,sort,uniq,tee,tr,split命令

● cut命令(分割)语法:cut -d '分隔符' [-cf] n 这里的n是正整数-d:后面指定分隔符,用单引号引起来-f:指定第几段-c:后面只有一个数字表示截取第几个字符,后面跟一个数字区域,表示截取从几到几head -n2 /etc/passwd|cut -d ':' -f 1head -n2 /etc/passwd|cut -c2● sort命令(排序)语法:sort -t 分隔符 -kn1,n2 -nru 这里的n1<n2-t:分隔符-n:使用纯数字排序-r:反向排序-u:去重复-

文本处理小公举(cut,sort,uniq,head,tail,tr,wc,diff)

tr 作用:可搭配集对应字符对字符的转换和删除 集对应字符 [:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符 #语法: tr [OPTION]... SET1 [SET2] #选项 -c或--complerm

特殊符号、管道符命令:cut、sort、uniq、wc、tee、tr、split等命令

特殊符号 *任意个任意字符 ?任意一个字符 #注释字符 \脱义字符 |管道符 $变量前缀, !$组合,正则里面表示行尾 :多条命令写到一行,用分号分隔 ~用户家目录,后面正则表达式中表示匹配符 &放到命令后面,会把命令丢到后台 > >> 2> 2>> &>:输出重定向.追加重定向.错误输出重定向.错误追加重定向.不区分重定向: []方括号表示指定字符中的一个,[0-9],[a-zA-Z],[abc]: ||和&& 判断语句,用于命令