linux 比较两个文件的不同 #grep -vFf file1 file2

linux 比较两个文件的不同 #grep -vFf file1 file2,第1张

获取在file2但不在file1中的记录

#grep -vFf file1 file2

获取两文件中拆磨埋铅的相旅液斗同行

#sort c d | uniq -d

需要准备的材料分别是:电脑、linux连接工具。

1、首先连接上linux主机,进入命令行状态。

2、在命令行状态下,用cd命令进到文件目录,用vi命令打开文件。

3、此时会看到有3行记迹亮基录,以查询同时包含123和fg字符为例。

4、在姿谨命令行页面,输入:grep 123 test.txt |grep fg,按回车。

5、此时会打印出同时包键胡含123和fg的行。

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。派逗

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

使用实例:

.grep 搜索字符串

命令格式:

grep string filename

寻找字串的方法很多,比如说我想找所有以M开头的行.此时必须引进pattern的观

念.以下是一些简单的例子,以及说明:

1、查找指定进程

命令:ps -ef|grep java

2、查找指定进程个数

命令:ps -ef|grep -c java

或ps -ef|grep java -c

3、从文件中读取关键词进行搜索,默认是显示的是行

例:通过管道过滤ls -l输出的内容,只显示以a开头的行。

例:显示所有以d开头的文件中包含test的行。

$ grep \'test\' d*

例:输出以hat结尾的行内容

$ cat test.txt |grep hat$

例:显示在aa,bb,cc文件中匹配test的行。

$ grep \'test\' aa bb cc

例:显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等,就可以使用[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文呢?就将他全部写在一起,变成:[a-zA-Z0-9]。

例:显示包含ed或者at字符的内容行

cat test.txt |grep -E "ed|at"

例:如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(. ),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用"尘散卖"号进行转义,直接写成'w(es)t. 1'就可以了。

$ grep \'w(es)t.*1\' aa

例:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

grep '[a-z]\{7\}' *.txt

例:查掘链询IP地址、邮箱、手机号

这里用到了-o和-P命令

man grep查看

也就是说-o,只显示匹配行中匹配正则表达式的那部分,-P,作为Perl正则匹配

192.168.0.1

abc@163.com

匹配ABC类IP地址即 1.0.0.1---223.255.255.254

grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt

grep -E --color "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>" file.txt

邮箱是任意长度数字字母@任意长度数字字母

命令(邮箱): grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt

手机号码是1[3|4|5|8]后面接9位数字的

命令(手机号): grep -E "\<1[3|4|5|8][0-9]{9}\>" file.txt

例:任意一个字节 . 与重复字节 *

. (小数点):代表『一定有一个任意字节』的意思;

例:限定连续 RE 字符范围 {}

利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节

打算找出两个到五个 o 的连续字串,该如何作?这时候就得要使用到限定范围的字符 {} 了。 但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12274808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存