Linux入门基础之grep

Linux入门基础之grep的使用

准备测试文本test.txt: 

[root@10-13-53-194 ~]# cat -n test.txt
     1	SET TIME_ZONE='+00:00' */;set
     2	SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
     3	40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
     4	40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
     5	40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;SET
     6	/*!40101 SET character_set_client = @saved_cs_client */;
     7	DROP TABLE IF EXISTS `gtl_posts`;
     8	/*!40101 SET @saved_cs_client     = @@character_set_client */;
     9	/*!40101 SET character_set_client = utf8 */;
    10	CREATE TABLE `gtl_posts` (
    11	post_password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
    12	post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
    13	to_ping` text COLLATE utf8mb4_unicode_ci NOT NULL,
    14	pinged` text COLLATE utf8mb4_unicode_ci NOT NULL,
    15	post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
    16	guid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
    17	menu_order` int(11) NOT NULL DEFAULT 0,
    18	post_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'post',
    19	post_mime_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
    20	comment_count` bigint(20) NOT NULL DEFAULT 0,
    21	PRIMARY KEY (`ID`),
    22	KEY `post_name` (`post_name`(191)),
    23	KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
    24	KEY `post_parent` (`post_parent`),
    25	KEY `post_author` (`post_author`)
    26	) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

grep完全匹配

 完全匹配是在文本里依次查找S,E,T字符,无论在文档中的哪个位置,找到S,E,T连在一起的都匹配,把匹配到的一行文本都输出

我们可以看到上面命令的执行结果,行首,行中,行尾的SET都找到了

要控制正则表达式在哪个位置匹配查找,可以使用定位符,行首定位符^,行尾定位符$

这时候只输出SET在行首和行尾的结果了,注意匹配行首^符号是在关键字的前面的,  匹配行尾$符号是在关键字后面的,如果$放在关键字前面,则得不到正确的结果:

可以看到没有任何输出,因为这时候,$符号不是作为一个行尾标记,而是作为关键字的把一部分了,看下面的例子,注意3个命令的关键字,KEY,KEY,$KEY

第一个的匹配文件中的所有KEY,第二个是匹配文件中以KEY结尾的所有行,第三是匹配文件中$KEY的行

-i参数,不区分大小写进行匹配

 其他常用参数:

-v 显示不包含正则表达式的匹配项进行匹配

-r 递归匹配一组文件或者目录(目录下面还有子目录也会去搜锁匹配)

-A  n 显示正则表达式之后至第n行的数据

-B n 显示正则表达式之至前面n行的数据

举例:

可以看到,这2个命令,前面一个显示grep命令本身

后面一个命令加了grep -v 'grep',就不显示grep命令本身了

-A 2 ,是指定显示匹配了set之后,匹配行后面的2行也输出

-B n是一样的道理的

那如果我们想同时匹配多个关键字进行查找呢?很简单,-e参数就行

导出的mysql文件,--开头的是注释,我们不想看,就用-v参数过滤掉

[root@10-13-53-194 ~]# grep -v -e '^--'  b.txt
/*!40000 ALTER TABLE `gtl_posts` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 /*开头的也是注释,如果我们不想看,加-e参数一起过滤掉就可以了

[root@10-13-53-194 ~]# grep -v -e '^--' -e '^/' b.txt
UNLOCK TABLES;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值