linux 日志 查找文件

2019-01-19 11:00:25 weixin_42184538 阅读数 7983

在Linux系统中使用xShell如何搜索查找文件里面的内容是查找问题、系统维护当中最常见的需求。搜索、查找文件当中的内容,一般最常用的是grep命令,另外还有egrep, vi命令也能搜索文件里面内容
假如是非压缩包文件,可以用grep命令去搜索,例如: grep –i “被查找的字符串” 文件名
假如是.gz压缩包类型的话,可以用zgrep命令去搜索,例如: zgrep –i “被查找的字符串” 文件名

1:搜索某个文件里面是否包含字符串,使用grep “search content” filename1, 例如在invest.appLog文件中搜索“9648345”

grep 9648345 invest.appLog grep "9648345" invest.appLog

在这里插入图片描述
被查找的内容会被标红(如下图)
在这里插入图片描述

补充:

(1)查找当前目录(包含子目录)的字符串:grep -r 字符串

grep -r "48345" *

会查询出当前目录(包含子目录)所有包含要查询字段的数据
在这里插入图片描述
(2)同时满足多个字符串查找:

grep 字符串1 文件名 | grep 字符串2 | grep 字符串3 | grep …

(3)满足多个关键字之一

grep -E “字符串1|字符串2|字符串3|” 文件名 或者

egrep “字符串1|字符串2|字符串3|” 文件名
2: 如果你想搜索多个文件是否包含某个字符串,可以使用下面方式

grep "search content" filename1 filename2.... filenamen
grep "search content" *.sql

3:如果需要显示搜索文本在文件中的行数,可以使用参数-n

grep -n "9648345" invest.appLog

在这里插入图片描述
查到的结果会在每行前面显示行数
在这里插入图片描述
4: 如果搜索时需要忽略大小写问题,可以使用参数-i
例如日志中有“48345”,显然使用"48345"是搜索不到的,但加上-i后便可以搜索出来

grep -i "48345</exser>" invest.appLog

在这里插入图片描述
6:搜索、查找匹配的行数(会返回包含查找内容的总行数)
$ grep -c “被查找的字符串” 文件名

grep -c "</exSer>" invest.appLog
2018-11-28 18:03:59 badao521_ 阅读数 4221

1.日志关键字搜索

grep 关键字1 文件名 | grep 关键字2 | more

2.全局搜索关键字所在文件夹
grep “要搜索的内容” * -Rn //此命令区分大小写,英文双引号要加上

*表示当前目录所有文件,也可以是某个文件名
-r 是递归查找
-n 是显示行号
-R 查找所有文件包含子目录
-i 忽略大小写

3.滚动日志文件关键字高亮红色

tail -f  要搜索的文本  | perl -pe 's/(要搜索的内容)/\e[1;31m$1\e[0m/g'//英文单引号

tail -500f 要搜索的文本 | grep -E "关键字1|关键字2....." -A10 -B10 --color=auto**//英文双引号,注意管道"|"

4.高亮只读文件

less 要搜索的文本 | grep -E "关键字1|关键字2....." -A10 -B10 --color=auto

more 要搜索的文本 | grep -E "关键字1|关键字2....." -A10 -B10 --color=auto

cat 要搜索的文本 | grep -E "关键字1|关键字2....." -A10 -B10 --color=auto

5.关键字搜索

grep 关键字1 xxx.log | grep 关键字2 | more

在搜索内容中 /关键字3  可以再次索引

6. zless

打包日志查看
zless   文件名   可以查看已打包日志,可以使用全文搜索等命令

6.参考资料
本文意在救急速用,没太多介绍,想了解可以观看菜鸟教程或官方文档和以下比较清晰的博文
引:
关于less和more的用法可以参考"https://www.cnblogs.com/aijianshi/p/5750911.html"
关于tail可以参考"https://www.cnblogs.com/mfryf/p/3336804.html"
关于cat可以参考"https://blog.csdn.net/zhangchao19890805/article/details/52703985"
“https://www.cnblogs.com/chenliyang/p/6633749.html”

2017-01-03 10:49:46 m13653423731 阅读数 28200

在工作中我总会通过日志来查找相关问题,但有时候日志太多有不知道又不知道日志什么时候打印的,这时我们可以通过一下方法来查找:

1、把目录跳到你日志文件存放的地方

2、grep  关键字  *    例如要查找多有有关tomcat的信息  grep  tomcat  *  这样就可以查到所有tomcat的信息和是哪个日志文件


3、vi  xxx.log  进入日志文件

4、/tomcat    这样就可以找出xxx.log中的tomcat信息的位置

2018-08-01 18:02:40 lch_2016 阅读数 39869

Q:Linux命令,根据关键字查询日志

A:1.单个文件可以使用vi或vim编辑器打开日志文件,使用编辑器里的查找功能。在查看模式下,符号/后面跟关键字向下查找,符号?后面跟关键字向上查找,按n查找下一个,按N查找上一个。
    2.多个文件可以使用grep命令,比如 grep ERROR /var/log/messages*。会把匹配到ERROR这个关键字的行和所在的日志文件直接输出到屏幕。
    3.还可以使用cat命令后面使用grep过滤等方法,不如上面两个实用。上面两个较常用。

常用到的命令在这里记录一下:

1.VI:单个文件可以使用vi或vim编辑器打开日志文件,使用编辑器里的查找功能。在查看模式下,符号/后面跟关键字向下查找,符号?后面跟关键字向上查找,按n查找下一个,按N查找上一个。

2.grep命令:cat 1.log | grep key  可以写为: grep key 1.log 

根据字符串查询日志中关键词出现的位置:cat -n 日志文件| grep 'keyword'

例:cat -n 1.log | grep 'keyword'

检索日志,并显示该条日志的前后N(10)行记录:cat 日志文件 | grep -n -B10 -A10 "关键字"

3.查看某段时间内的日志: sed -n '/起始时间/,/结束时间/p' 日志文件,

   查看某段时间内的关键字日志:sed -n '/起始时间/,/结束时间/p' 日志文件| grep ‘keyword’

例:sed -n ‘/2018-06-21 14:30:20/,/2018-06-21 16:12:00/p’ catalina.out | grep ‘keyword’

4.

tail  -n  10  日志文件   查询日志尾部最后10行的日志;

tail -n +10 日志文件    查询10行之后的所有日志;

head -n 10  日志文件  查询日志文件中的头10行日志;

head -n -10  日志文件  查询日志文件除了最后10行的其他所有日志;

5. 

如果我们查找的日志很多,打印在屏幕上不方便查看, 有两个方法:

(1)使用more和less命令, 如: cat -n test.log |grep "地形" |more     这样就分页打印了,通过点击空格键翻页

(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析.如:

cat -n test.log |grep "地形"  >xxx.txt

 

1.VI中

参考:https://www.cnblogs.com/moly/p/9186664.html

//以下删除命令好多都是剪贴,删除应该就是剪贴吧。。
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?name:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;
1,3 co 4 将1-3行复制到4行之后
set nu 显示行数
nu 查看行数
u 撤销
U 撤销,撤销上一次撤销, 就是撤销/恢复重复
gg 光标移动到第一行
G 光标到最后一行
1/2/3 任意数字,光标到指定数字行
"zz"命令会把当前行置为屏幕正中央,"zt"命令会把当前行置于屏幕顶端,"zb"则把当前行置于屏幕底端.
搜索: "?"命令与"/"的工作相同,只是搜索方向相反.n下一次出现的位置,"N"命令会重复前一次查找,但是与最初用"/"或"?"指定的搜索方向相反。
如果查找内容忽略大小写,则用命令"set ignorecase", 返回精确匹配用命令"set noignorecase"
\ 用于转义特殊字符

2.linux中grep命令的用法

参考:https://www.cnblogs.com/flyor/p/6411140.html

作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。

首先谈一下grep命令的常用格式为:grep  [选项]  ”模式“  [文件]

grep家族总共有三个:grep,egrep,fgrep。

常用选项:

  -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A  n:显示匹配到的字符串所在的行及其后n行,after

  -B  n:显示匹配到的字符串所在的行及其前n行,before

  -C  n:显示匹配到的字符串所在的行及其前后各n行,context

   

   

 

 

模式部分:

  1、直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下hello.c文件中printf的个数:grep  -c  "printf"  hello.c

  2、使用基本正则表达式,下面谈关于基本正则表达式的使用:

    匹配字符:

      . :任意一个字符。

      [abc] :表示匹配一个字符,这个字符必须是abc中的一个。

      [a-zA-Z] :表示匹配一个字符,这个字符必须是a-z或A-Z这52个字母中的一个。

      [^123] :匹配一个字符,这个字符是除了1、2、3以外的所有字符。

      对于一些常用的字符集,系统做了定义:

      [A-Za-z] 等价于 [[:alpha:]]

      [0-9] 等价于 [[:digit:]]

      [A-Za-z0-9] 等价于 [[:alnum:]]

      tab,space 等空白字符 [[:space:]]

      [A-Z] 等价于 [[:upper:]]

      [a-z] 等价于 [[:lower:]]

      标点符号 [[:punct:]]

      

 

 

    匹配次数:

      \{m,n\} :匹配其前面出现的字符至少m次,至多n次。
      \? :匹配其前面出现的内容0次或1次,等价于\{0,1\}。
      * :匹配其前面出现的内容任意次,等价于\{0,\},所以 ".*" 表述任意字符任意次,即无论什么内容全部匹配。

      

 

 

 

    位置锚定:

      ^ :锚定行首

      $ :锚定行尾。技巧:"^$"用于匹配空白行。

      \b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker

      \b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like

      \B :与\b作用相反。

      

      

 

 

    分组及引用:

      \(string\) :将string作为一个整体方便后面引用

        \1 :引用第1个左括号及其对应的右括号所匹配的内容。

        \2 :引用第2个左括号及其对应的右括号所匹配的内容。

        \n :引用第n个左括号及其对应的右括号所匹配的内容。

        

 

 

  3、扩展的(Extend)正则表达式(注意要使用扩展的正则表达式要加-E选项,或者直接使用egrep):

    匹配字符:这部分和基本正则表达式一样

 

    匹配次数

      * :和基本正则表达式一样

      ? :基本正则表达式是\?,二这里没有\。

      {m,n} :相比基本正则表达式也是没有了\。

      + :匹配其前面的字符至少一次,相当于{1,}。

 

    位置锚定:和基本正则表达式一样。

 

    分组及引用

      (string) :相比基本正则表达式也是没有了\。

        \1 :引用部分和基本正则表达式一样。

        \n :引用部分和基本正则表达式一样。

 

    或者

      a|b :匹配a或b,注意a是指 | 的左边的整体,b也同理。比如 C|cat 表示的是 C或cat,而不是Cat或cat,如果要表示Cat或cat,则应该写为 (C|c)at 。记住(string)除了用于引用还用于分组。

     

注1:默认情况下,正则表达式的匹配工作在贪婪模式下,也就是说它会尽可能长地去匹配,比如某一行有字符串 abacb,如果搜索内容为 "a.*b" 那么会直接匹配 abacb这个串,而不会只匹配ab或acb。

注2:所有的正则字符,如 [ 、* 、( 等,若要搜索 * ,而不是想把 * 解释为重复先前字符任意次,可以使用 \* 来转义。

 

下面用一个练习来结束本次grep的学习:

在网络配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33 中检索出所有的 IP

1、检索出 0-255的范围

2、由0-255的数字组合成IP

3、简化

其他参考:https://jingyan.baidu.com/article/656db918fccd01e381249c2b.html

                  https://blog.csdn.net/janwen2010/article/details/72954125

                  https://blog.csdn.net/u013410747/article/details/71192140

 

2017-03-31 17:11:24 liuwei8nn1 阅读数 7156
linux查看日志文件内容命令tail、cat、tac、head、echo、grep


less file 分页查看文件
:ctrl+G 最后
:u
: d     下


tail -f test.log
你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C,


grep 基本:
grep 'test' filename 
grep -n 'test' filename 显示行号 
grep 'test' file name | grep 'hello' 管道符
-r 是递归查找
grep 控制上下文
grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行
grep -B 5 foo file 显示foo及前5行
grep -A 5 foo file 显示foo及后5行


---------------------------
linux 如何显示一个文件的某几行(中间几行)


从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000


显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000


*注意两种方法的顺序
分解:
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行


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


例:cat mylog.log | tail -n 1000 #输出mylog.log 文件最后一千行


---------------------------
cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename 
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2


把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3


把test.txt文件扔进垃圾箱,赋空值test.txt
cat /dev/null > /etc/test.txt 
注意:>意思是创建,>>是追加。千万不要弄混了。
------------------------------------------
tac (反向列示)
tac 是将 cat 反写过来,所以他的功能就跟 cat 相反, cat 是由第一行到最后一行连续显示在萤幕上,
而 tac 则是由最后一行到第一行反向在萤幕上显示出来!


------------------------------------------
在Linux中echo命令用来在标准输出上显示一段字符,比如:
echo "the echo command test!"


这个就会输出“the echo command test!”这一行文字!


echo "the echo command test!">a.sh
这个就会在a.sh文件中输出“the echo command test!”这一行文字! 
该命令的一般格式为: echo [ -n ] 字符串其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。
用echo命令输出加引号的字符串时,将字符串原样输出;
用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。


------------------------------------------

【Linux】日志查找

阅读数 1350

linux查找日志技巧

阅读数 1331