如果在只是想匹配模式的上下几行,grep可以实现。

$grep -5 'parttern' inputfile //打印匹配行的前后5行

$grep -C 5 'parttern' inputfile //打印匹配行的前后5行

$grep -A 5 'parttern' inputfile //打印匹配行的后5行

$grep -B 5 'parttern' inputfile //打印匹配行的前5行

查看mysql慢日志中ip地址为192.168.0.10发送过来的SQL语句的后面三行

  1. tail -50 /usr/local/mysql/data/sql-slow.log |grep -3 '192.168.0.10'

匹配php错误日志中某一个字段

 2,tail -100 /data/logs/php/php_error_5.3.log  | grep  "Memcache::get()";

查看某一个文件第5行和第10行

sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。

========================================================================================

1、tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。

2、tail -n 20 filename
说明:显示filename最后20行。

3、tail -r -n 10 filename
说明:逆序显示filename最后10行

========================================================================================

对日志记录做多次grep过滤输出,格式如下:

tail -f log | grep xxx | grep yyy

发现grep失效,无法做正确输出。google研究了一下,原因如下:

管道 | 是全缓冲的,一般来说buffer_size为4096,有些是8192。不管具体值多少,只有buffer_size满了,才会看到输出。

在操作里  >>file 这个操作也是全缓冲的。调整如下

tail -f log | grep --line-buffer xxx | grep --line-buffer yyy

结果输出正常。

grep当带上了 --line-buffer 的时候,每输出一行,就刷新一次。

在unix里,块设备和普通文件,以及管道都是全缓冲的。

对日志分析告警和实时监控可以考虑如下形式:

tail -f $LOGF | while read var

do

case "$var" in

...

...

esac

done

========================================================================================

标准unix/linux下的grep通过下面參数控制上下文

grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行

grep -B 5 foo file 显示foo及前5行

grep -A 5 foo file 显示foo及后5行

查看grep版本号的方法是

grep -V

========================================================================================

grep 后面带上-A -B -C 参数可以多显示几行内容

grep -A 5 可以显示匹配内容以及后面的5行内容

grep -B 5 可以显示匹配内容以及前面的5行内容

grep -C 5 可以显示匹配内容以及前后面的5行内容

$ cat size.txt

b124230

b034325

a081016

m7187998

m7282064

a022021

a061048

m9324822

b103303

a013386

b044525

m8987131

B081016

M45678

B103303

BADc2345

$ cat size.txt | grep 'a022021'

a022021

$ cat size.txt | grep 'a022021' -C 2

m7187998

m7282064

a022021

a061048

m9324822

$ cat size.txt | grep 'a022021' -B 2

m7187998

m7282064

a022021

$ cat size.txt | grep 'a022021' -A 2

a022021

a061048

m9324822

========================================================================================

1.目录操作:

(1)cd  (切换目录)

  cd ~   回到主目录

  cd      回到主目录

  cd ..   回到上层目录

  cd -    回到刚才的目录

  cd /var/spool/mail    绝对路径

  cd ../mqueue     相对路径(由/var/spool/mail 转到/var/spool/mqueue这样写)

(2)pwd (显示当前目录)

  pwd   显示当前目录

  pwd -P   显示当前目录(不以连接文件的数据显示,而是显示正确的完整路径)

(3)mkdir (新建一个新目录)

  mkdir -p test1/test2/test3   创建多层目录

  mkdir -m 777 test2   新建权限777的目录

(4)rmdir (删除一个空目录)

  rmdir test  删除空文件夹test

  rmdir -p test1/test2/test3  删除test1/test2/test3

2.文件与目录管理

(1)查看文件目录(ls)

  ls -a  列出全部文件,包括隐藏文件

  ls -A  列出全部文件,包括隐藏文件,不包括.与..两个目录

  ls -d  仅列出目录本身,不包括其中文件数据

  ls -l   列出长串数据,包含文件属性与权限

  ls -R 按文件容量大小排序

  ls -t  按时间排序

  ls --color=never  不显示颜色(always显示颜色,auto自动判断)

  ls --full-time  以完整时间模式输出

(2)复制、删除与移动(cp,rm,mv)

  cp -a  /var/log/wtmp wtmp_test 将文件所有特性复制过去

  cp /var/log/wtmp .  复制到当前目录

  cp -i   若目标文件存在,则覆盖时先询问操作的进行

  cp -p  连同文件属性一起复制

  cp -r   目录的复制

  cp -d  若源文件作为连接文件的属性,则复制连接文件属性而非连接文件本身

  cp -s  复制成为符号连接文件

  rm -i  互动模式,删除前询问用户是否操作

  rm -f  忽略不存在的文件,不会出现警告信息

  rm -r  递归删除

  mv -f  如果目标文件存在,不会询问而直接覆盖

  mv -i  如果目标文件存在,则询问是否覆盖

  mv -u 如果目标文件存在,且source比较新,则覆盖

(3)取得路径文件名与目录名称

   basename /etc/systemd/network  取得最后的文件名(network)
   dirname /etc/systemd/network      取得目录名(/etc/systemd)
3.文件内容查阅
(1)直接查看文件内容
  cat 由第一行开始显示内容

  cat -A  完整显示,包含特殊字符

  cat -b  列出行号(空白行不标行号)

  cat -n  打印出行号(包括空白行)

  tac 反向显示,与cat相反

  nl 添加行号打印

  nl -b a  打印出行号(包括空白行),类似cat -n

  nl -b t   如果有空行,空的那行不列出行号

  nl -n ln  行号在屏幕坐方显示

  nl -n rn  行号在字段右方显示,不加0

  nl -n rz  行号在字段右方显示,加0

  nl -w 3   行号默认字段改为3位

(2)可翻页查看

  more /etc/manpath.config 查看文件信息(空格翻页,enter键向下滚动一行,/字符串向下查询,:f立刻显示文件名及目前显示行数,b往回翻页,q离开)

  less /etc/manpath.config 查看文件信息(空格/pageup上翻,pagedown下翻,/字符串向下查询,?字符串向上查询,n重复查询,N反向重复,q离开) 

(3)数据选取

  head -n 10 /etc/manpath.config  显示前10行(不加-n 10也是默认显示前10行) 

  head -n -10 /etc/manpath.config  显示前面所有行数,不包括后10行

  tail -n 20 /etc/manpath.config  显示最后20行

  tail -n +20 /etc/manpath.config  显示后面所有行数,不包括前20行

  tail -f  持续检测行数,直到按下ctrl+c

(4)非文本文件

  od -t a  默认字符输出

  od -t c  ASCII字符输出

  od -t d  十进制输出(f浮点数,o八进制,x十六进制)

  od -t oCc /etc/issue  八进制列出存储值与ASCII对照表

(5)修改文件时间或者创建新文件

  touch test  新建一个新文件test

  touch -a  修改访问时间

  touch -c  仅修改文件时间,若文件不存在则不创建新文件

  touch -m 修改mtime

  touch -d "2 days ago" test   test文件日期调整为两天前

  touch -t 1503151820 test  test文件时间调整为2015.3.15 18:20

4.默认权限与隐藏权限

  umask 002  默认权限去除的是其他人权限的w权限

  chattr +i test 设置test文件的隐藏属性(不能被删除、改名、写入添加数据,仅root用户可设置)

  chattr +a test 设置test文件的隐藏属性(只能添加数据,不能删除、修改,仅root用户可设置)

  chattr -a test 取消test文件的隐藏属性

  lsattr test  显示test文件隐藏属性

  file test  查看文件类型

5.命令与文件的查询

  which ifconfig 找出ifconfig命令的完整文件名

  whereis ifconfig  寻找ifconfig这个文件

  locate ifconfig   寻找与ifconfig相关的文件

  find /etc -mtime 3  3天前的一天之内改过的文件

  find /etc -mtime -3  3天之内改过的文件(不包括第3天)

  find /etc -mtime +3  3天之前改过的文件(不包括第3天)

  find /etc -newer /etc/passwd  寻找/etc下比passwd日期新的文件并列出

  find / -nouser  寻找系统中不属于任何人的文件

  find /home -user root  寻找/home下属于root的文件

  find /etc -name test  寻找/etc下名为test的文件

  find / -size +100k 寻找系统中大于100k的文件

  find / -size +100k -exec ls -l {} \;  将上面找到的文件用ls -l列出来

linux-grep-tail-find的更多相关文章

  1. linux grep 从入门到精通

    linux grep 从入门到精通 一.初级 搜索日志 grep "186" catalina.out 在新输出日志中监听固定字符串 tail -f catalina.out | ...

  2. linux grep命令

    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...

  3. PHP实现linux命令tail -f

    PHP实现linux命令tail -f 今天突然想到之前有人问过我的一个问题,如何通过PHP实现linux中的命令tail -f,这里就来分析实现下. 这个想一想也挺简单,通过一个循环检测文件,看文件 ...

  4. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  5. 如何使用Unix/Linux grep命令——磨刀不误砍柴工系列

     http://man.linuxde.net/grep ---------------------------------------------------- 如何使用Unix/Linux gre ...

  6. linux grep命令总结

    风生水起善战者,求之于势,不责于人,故能择人而任势. 博客园    首页    新随笔    联系    订阅    管理 posts - 791,  comments - 394,  trackba ...

  7. Linux grep命令详解[备份]

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  8. linux grep命令(linux在文件中搜索内容)

    转自:https://www.cnblogs.com/end/archive/2012/02/21/2360965.html linux grep命令 1.作用Linux系统中grep命令是一种强大的 ...

  9. linux grep 搜索查找

    查找关键字在哪些文件夹中的哪些文件中出现(只列出文件名称): grep -l 15386257298 */* 查找关键字在哪些文件夹中的哪些文件中出现(列出文件名称+关键字): grep -o 153 ...

  10. linux grep 查询多行的方法

    linux grep 查询多行的方法 经常查询 git log 中使用的方法, 如下 git log |grep "xxxx" 如果想查询多行的话, 就有些尴尬, 如果想查询多行的 ...

随机推荐

  1. Android PopupWindow 仿微信弹出效果

    项目中,我须要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果.这样大家直接拿到项目里就能够用了! 首先让我们先看效果: 那么我首 ...

  2. 物联网架构成长之路(29)-Jenkins环境搭建

    0. 说明 哈哈,前面中间插入了一篇Eclipse增加Git插件,在此之前真的没有用过GIT. 1. 运行Jenkins 这里为了方便,还是用Docker方式安装,由于这个是标准的war报,不对Doc ...

  3. Git忽略规则.gitignore忽略node_modules文件夹

    在项目文件夹里添加.gitignore的文件 打开文件,在里面添加 /node_modules

  4. QT信号/槽

    在我的理解中,QT和Android都是类似的开发框架,都是由开发团队封装了各式各样的接口和数据结构.将一些问题的解决方法简单化比如QT中将线程封装为QThread,派生类通过重写run方法来将代码投入 ...

  5. oracle查看某表字段类型

    来源:https://www.cnblogs.com/ufindme/p/5033843.html 今天遇到一个问题:要求在可重复执行的SQL脚本添加一段SQL代码:修改当前的数据类型.因为SQL代码 ...

  6. Swagger UI 与SpringMVC的整合

    关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...

  7. 给你的app添加桌面widget

    首先,什么是桌面widget,桌面widget是一种桌面插件,如下图: 这种类型的控件叫做widget,一般长按桌面会弹出一个界面让你选择控件,选择完了拖到桌面就能使用了. 下面我们为这个app来添加 ...

  8. python使用requests发送application/x-www-form-urlencoded请求数据

    def client_post_formurlencodeddata_requests(request_url,requestJSONdata): #功能说明:发送以form表单数据格式(它要求数据名 ...

  9. C#GDI+ 绘制线段(实线或虚线)、矩形、字符串、圆、椭圆

    C#GDI+ 绘制线段(实线或虚线).矩形.字符串.圆.椭圆 绘制基本线条和图形 比较简单,直接看代码. Graphics graphics = e.Graphics; //绘制实线 )) { pen ...

  10. UIWebView使用app内自定义字体

    最近,做了个小需求.因为app是使用的自定义字体,所以产品想让h5的字体跟app的字体一致,减少脱离感.而一般来说,app内的h5页面,都是显示系统的默认字体.要想使用自定义字体,一般的做法是在h5里 ...