最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

TIPTOP查找命令grep用法记录

unix与数据库 bron1984 5050浏览

TIPTOP查找命令grep用法记录

1、与find的区别:find 命令用于在系统中搜索符合条件的文件名、文件名、文件名(重要的事情说三遍)。Grep可以查找文件内的内容。

用法:

从文件内容查找匹配指定字符串的行:

$ grep “被查找的字符串” 文件名

常用选项:

-e :表示或者。

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

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

-n :显示行号

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

-r :递归查找

注意:”被查找的字符串”,可以是正则表示式

例子:[]表示其中的某一个字符,只要匹配其中一个就行[abc],表示a或者b或者c:

find “t[ea]st” test.txt

搜索并输出含有test或tast的行

更多正则表示式需要自己去摸索

 

例子:

2、在/etc/passwd文件中查找单词“linuxtechi”

grep linuxtechi /etc/passwd

3、查找当前目录下哪个4GL文件用到了“ima904”这个字段

grep “ima904” *.4gl

4、更进一步,我们在看所有的模块下,有哪个文件用到了“ima904”这个字段

grep -r “ima904” ./

其中 ./ 表示当面目录。也可以改为 grep -r “ima904” /u1/topprod

4、查看符合条件的日志条目

grep -n ‘2019-10-24 00:01:11’ *.log

再来,这次,我们的目标是,找出所有现在打开的程序asfi301都kill掉。

1、ps -ef 命令将某个进程显示出来

查出来的命令太多,所以要用到grep来进一步搜索

2、在上面命令结果里面,只搜索包含有fglrun 的结果

ps -ef | grep fglrun

还是太多了。我们继续

3、在上面命令结果里面,只搜索包含有asfi301 的结果

ps -ef | grep fglrun | grep asfi301

这就是我们要的结果了。这个时候我们可以找到PID进程号,再用root账号kill 进程号

但是,要操作次数太多太麻烦了,我们继续

我们只要结果中的PID号。其中 print $2是显示结果中第二列

ps -ef | grep fglrun | grep asfi301|awk ‘{print $2}’

在这个基础上就可以用下面语句一次kill掉。当然了,这步的执行会强行关掉用户打开的asfi301程序,可能会造成异常。不要随便操作。在此仅作举例用。

ps -ef | grep fglrun | grep asfi301|awk ‘{print $2}’|xargs kill -9

这里是输出ps -ef |grep … 结果的第二列的内容然后通过动态参数xargs传递给kill -9,其实第二列内容就是上面结果中的进程号!

收集来的匹配的实例:

grep -c “48” test.txt 统计所有以“48”字符开头的行有多少

grep -i “May” test.txt 不区分大小写查找“May”所有的行)

grep -n “48” test.txt 显示行号;显示匹配字符“48”的行及行号,相同于 nl test.txt |grep 48)

grep -v “48” test.txt 显示输出没有字符“48”所有的行)

grep “471” test.txt 显示输出字符“471”所在的行)

grep “48;” test.txt 显示输出以字符“48”开头,并在字符“48”后是一个tab键所在的行

grep “48[34]” test.txt 显示输出以字符“48”开头,第三个字符是“3”或是“4”的所有的行)

grep “^[^48]” test.txt 显示输出行首不是字符“48”的行)

grep “[Mm]ay” test.txt 设置大小写查找:显示输出第一个字符以“M”或“m”开头,以字符“ay”结束的行)

grep “K…D” test.txt 显示输出第一个字符是“K”,第二、三、四是任意字符,第五个字符是“D”所在的行)

grep “[A-Z][9]D” test.txt 显示输出第一个字符的范围是“A-D”,第二个字符是“9”,第三个字符的是“D”的所有的行

grep “[35]..1998” test.txt 显示第一个字符是3或5,第二三个字符是任意,以1998结尾的所有行

grep “4\{2,\}” test.txt 模式出现几率查找:显示输出字符“4”至少重复出现两次的所有行

grep “9\{3,\}” test.txt 模式出现几率查找:显示输出字符“9”至少重复出现三次的所有行

grep “9\{2,3\}” test.txt 模式出现几率查找:显示输出字符“9”重复出现的次数在一定范围内,重复出现2次或3次所有行

grep -n “^$” test.txt 显示输出空行的行号

ls -l |grep “^d” 如果要查询目录列表中的目录 同:ls -d *

ls -l |grep “^d[d]” 在一个目录中查询不包含目录的所有文件

ls -l |grpe “^d…..x..x” 查询其他用户和用户组成员有可执行权限的目录集合

附正则表达式

  • 字符匹配
    • . 匹配任意单个字符
    • [abc] 匹配执行范围内的任意单个字符abc都符合,数量可以用 [0-9]
    • [^abc] 取反
    • [:alnum:] 数字大小写 [a-zA-Z0-9]
    • [:alpha:] 大小写字母 [a-zA-z]
    • [:lower:] 小写字母 [a-z]
    • [:upper:] 大写字母 [A-Z]
    • [:digit:] 数字 [0-9]
    • [:punct:] 标点符号
  • 匹配次数
    • * 0次或者多次,是贪婪匹配
    • \?0次或者一次
    • \+ 最少一次
    • \{n\} 匹配n次
    • \{m,n\} 最少m次,最多n次
    • \{,n\} 最多n次
    • \{m,\} 最少m次
  • 位置锚定
    • ^ 行首锚定
    • $ 结尾
    • ^$ 空行
  • 向后引用
    • \1:表示前面第一个括号内匹配之后产生的字符,在\1的位置要在出现一次
    • \2:

 

转载请注明:赫非域 » TIPTOP查找命令grep用法记录