前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell入门系列(9)grep

shell入门系列(9)grep

作者头像
suveng
发布2019-09-17 10:19:28
4720
发布2019-09-17 10:19:28
举报
文章被收录于专栏:分享/效率/工具/软件

shell入门系列(9)grep

简介

搜索文本文件内容,默认输入匹配到的那一行

  • 通配符
  • 正则表达式

入门小案例

搜索单个文件

代码语言:javascript
复制
# grep "内容" 文件
grep "bash" ~/.bashrc
grep bash ~/.bashrc
效果
效果

搜索多个文件

代码语言:javascript
复制
# 
grep "bash" ~/.bashrc ~/.oneinstack
效果
效果

选项

-E

使用正则表达式

代码语言:javascript
复制
#
grep -E "[0-9]+" ~/.bashrc
egrep "[0-9]+" ~/.bashrc

[外链图片转存失败(img-Us3HVPA2-1563242272153)(http://ww1.sinaimg.cn/large/006jIRTegy1fzde5ckqulg30ig0abweg.gif)]

-v

排除内容。

代码语言:javascript
复制
#
grep -v "bash" ~/.bashrc
效果
效果

-c

显示搜索行数

代码语言:javascript
复制
#
grep -c "bash" ~/.bashrc
效果
效果

-o

输出匹配到的内容

代码语言:javascript
复制
#
grep -o "bash" ~/.bashrc 

通过管道 传给 wc 计算行数

代码语言:javascript
复制
#
grep -o "bash" ~/.bashrc | wc -l
效果
效果

-n

带行号显示

代码语言:javascript
复制
#
grep -n "bash" ~/.bashrc
效果
效果

-l

输出匹配到内容的源,这里我们用的源是文件。

代码语言:javascript
复制
#
grep -l "bash" ~/.bashrc ./test1.txt ./test2.txt ./test3.txt

下面给出测试文件内容!

test1.txt

代码语言:javascript
复制
bash 我是第一行
lll 
kkk lll kkk
kkk

test2.txt

代码语言:javascript
复制
我是第一行
nice work world
keyborad black
red

test3.txt

代码语言:javascript
复制
bash kkk lll kkk
kkl ddk llkd 
效果
效果

-L

-l 相反 ,输出没有匹配到的源

代码语言:javascript
复制
#
grep -L "bash" ~/.bashrc ./test1.txt ./test2.txt ./test3.txt
效果
效果

-R 递归搜索

-R 可以递归某一个目录下的文件,搜索其每一个文件的内容。

代码语言:javascript
复制
#
grep -R -n "main" /usr/include
效果
效果

-i 不分大小写

代码语言:javascript
复制
#
grep -i "main" ~/.bashrc

-e 多重搜索

代码语言:javascript
复制
#
grep -e "bash" -e "m" ~/.bashrc -n

--include 指定文件类型

代码语言:javascript
复制
#
grep "bash" /usr/include -R -n --include "*.c"
grep "bash" /usr/include -R -n --include "*.{c,cpp,h}"

--exclude 排除文件类型

代码语言:javascript
复制
#
grep "bash" /usr/include -R -n --exclude "*.c"

-q 安静模式

-q 不会显示任何东西,但是可以通过输出 命令结果查看

代码语言:javascript
复制
# 如果echo 输出为0 则搜到了, 如果不等于0 则没有搜到
grep -q "bash" ~/.bashrc
echo $?

最好使用脚本模式进行这个操作

q.sh

代码语言:javascript
复制
#! /bin/bash
if [ $# -eq 2 ];
then
	echo "$0  match_text filename"
	exit
fi
match_text=$1
filename=$2

grep -q $match_text $filename

if [ $? -eq 0 ];
then 
	echo "exit"
else 
	echo "does not exit"
fi

-A 向后匹配

把匹配到的后几行都显示出来

代码语言:javascript
复制
#
grep "bash" ~/.bashrc -A 3

-B 向前匹配

把匹配到的前几行都显示出来

代码语言:javascript
复制
#
grep "bash" ~/.bashrc -B 3

-C 同时向前向后匹配

把匹配到的后几行和前几行都显示出来

代码语言:javascript
复制
#
grep "bash" ~/.bashrc -C 3

-Z 消除间隔

代码语言:javascript
复制
# 以 0 分隔
grep "bash" /usr/include/*.c -LZ 
grep "bash" /usr/include/*.c -LZ | xags -0 rm
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shell入门系列(9)grep
    • 简介
      • 入门小案例
        • 搜索单个文件
        • 搜索多个文件
      • 选项
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档