相关文章推荐
稳重的企鹅  ·  mysql ...·  1 年前    · 
何为grep命令

grep 是Linux系统中强大的文本检索工具,它可以使用正则表达式,搜索输入文本中匹配的记录,并输出。
grep 命令家族包含 grep fgrep egrep fgrep 相当于 grep -F egrep 相当于 grep -E

grep 支持 BRE ERE Perl 规范的正则表达式,默认使用 BRE

grep语法
grep [-options]

grepoptions选项主要包含四大类:

  • 输出控制
  • 上下文控制
  • 正则表达式类型的选择
  • 其他杂项,比如输出版本信息
输出控制(Output Control)
  • -b--byte-offset:在显示匹配的行之前,标识出该行第一个字符在该文件或输入流中的字节偏移量
    例如,显示字符串3456所在的行中第一个字符的字节偏移量(示例字符流为helloworld\n123456):

    [root@local ~]# echo -e "helloworld\n123456" | grep -b "3456"
    11:123456
    
  • -c--count:计算一共有多少符合正则表达式的记录。
    例如下面的例子中可以显示当前主机有多少个TIME_WAIT连接:

    [root@local ~]# netstat -ano | grep -c "TIME_WAIT"
    

    相当于在netstat -ano输出的结果中,找出一共有多少个TIME_WAIT关键字

  • -m<次数>--max-count=<次数>:当匹配记录达到多少次后停止检索

    [root@local ~]# echo -e "abc\nabc\nabc" | grep -m2 "abc"
    
  • -n--line-number:在打印匹配行之前加上该行行号
    例如下面命令可以显示文件.bash_profileexport所在单词的行号和行内容:

    [root@local ~]# grep -n "export" .bash_profile
    12:export PATH
    
  • -h--no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。

    [root@local ~]# grep -drecurse -h "export"
    export PATH
    
  • -H--with-filename:与-h相反,标识所属的文件名称:

    [root@local ~]# grep -drecurse -h "export"
    .bash_profile:export PATH
    
  • -o--only-matching:只打印出匹配正则表达式的文本,不打印出所在的行

    [root@izj6cid7b1uq3w3cmzmf7ez ~]# grep -o "export" .bash_profile
    export
    
  • -q--quiet--slient:不输出任何信息

  • -d <动作>--directories=<动作>:当指定的路径是文件夹而非文件时,需要使用该参数。“动作”参数主要包含三种:readrecurseskip三种:

    1. read在扫描指定路径时,若包含子目录时会报错。
    2. recurse在扫描指定路径时,若包含子目录时,会进入子目录递归检索文件,等同于-r--recursive
    3. skip在扫描指定路径时,若包含子目录时,会跳过。

    使用案例:

    [root@local ~]# grep -drecurse "export"
    .bash_profile:export PATH
    
  • -l--file-with-matches:只列出符合正则表达式的文件名,不显示具体的行
    例如下面的命令可以找出当前目录下存在长度超过20个字母的单词的文件名(省略输出)

    [root@local ~]# grep -l -e "\w\{20,\}" -drecurse
    
  • -L--files-without-match:与-I相反,列出不符合正则表达式

  • -a--text:不忽略二进制(非文本)数据

  • --include=<正则表达式>:只检索文件名或文件夹名匹配指定正则表达式的文件

  • --exclude=<正则表达式>:不检索文件名或文件夹名匹配指定正则表达式的文件

  • --exclude-dir=<正则表达式>:不检索文件夹名匹配指定正则表达式的文件

  • --exclude-from=<正则表达式>:不检索文件名匹配指定正则表达式的文件

  • --line-buffered:每次搜索到匹配行后都会flush一次输出缓冲区

上下文控制(Context Control)
  • -A<显示行数>--after-context=<显示行数>:除了显示符合给定正则表达式的记录以外,还显示该行之后的内容。
    在下面的示例中需要查找出处于TIME_WAIT连接的信息,找到匹配行后,如果我想要输出紧接着的后面一行,那么可以使用grep -A1,如果不需要输出后面的一行,那么使用grep -A0或忽略-A0即可。
    [root@local ~]# netstat -ano | grep -A1 "TIME_WAIT"
    tcp        0      0 172.17.38.237:43528     100.103.0.45:80         TIME_WAIT   timewait (19.63/0/0)
    tcp        0      0 172.17.38.237:59932     172.217.24.46:443       ESTABLISHED off (0.00/0/0)
    tcp        0      0 172.17.38.237:35216     172.217.174.194:443     TIME_WAIT   timewait (43.74/0/0)
    tcp        0      0 172.17.38.237:51822     172.217.26.131:443      ESTABLISHED off (0.00/0/0)
    [root@local ~]# netstat -ano | grep -A0 "TIME_WAIT"
    tcp        0      0 172.17.38.237:43528     100.103.0.45:80         TIME_WAIT   timewait (8.81/0/0)
    tcp        0      0 172.17.38.237:35216     172.217.174.194:443     TIME_WAIT   timewait (32.92/0/0)
    
  • -B<显示行数>--before-context=<显示行数>:和-A类似,只不过显示的是匹配行之前的行
  • -C<显示行数>-<显示行数>--context=<显示行数>:相当于-A-B的结合,显示匹配行前后的行记录。
  • -U--binary,检索时不忽略\r字符(Windows使用\r\n作为换行符)
正则表达式控制(Regexp selection and interpretation)
  • -e<正则表达式>--regexp=<正则表达式>:指定字符串作为查找文件内容的正则表达式。
    [root@local ~]# grep -e export .bash_profile
    export PATH
    
    当然也可以不使用-e
    [root@local ~]# grep export .bash_profile
    export PATH
    
    如果正则表达式包含空格,需要使用双引号。
  • -i--ignore-case:忽略大小写差别
    [root@local ~]# grep -drecurse -i "Export"
    .bash_profile:export PATH
    
  • -w--word-regxp:只匹配单词,也就是在读取文件时会以空格为分隔符将其拆分为多个单词,然后逐一比对
    [root@local~]# echo -e "hello world" | grep "hello w"
    hello world
    [root@local ~]# echo -e "hello world" | grep -w "hello w"
    
  • -x--line-regexp:和-w不同,-x会以换行符\n为分隔符,将文件拆分为多个部分,再逐一比对
  • -f<规则文件路径>--file=<规则文件路径>:指定一个规则文件,包含多个正则表达式,用换行符隔开。
    下面这个例子创建了一个规则文件rule,包含两个规则:helloworld,然后查找文本the world is my oyster中,符合这两个规则的文本所在的行:
    [root@local ~]# echo -e "hello\nworld" > rule
    [root@local ~]# echo "the world is my oyster" | grep -f rule 
    the world is my oyster
    
  • -F--fixed-strings:将正则表达式视为固定字符串的列表
  • -z--null-data:每行以\0结尾,而不是\n
  • -G--basic-regexp:使用BRE规范的正则表达式
  • -E--extended-regexp:使用ERE规范的正则表达式
  • -P--perl-regexp:使用Perl规范的正则表达式
  • -s--no-messages:不显示错误信息
  • -v--revert-match:显示不包含匹配文本所在的行
    [root@local ~]# echo -e "hello\nworld" | grep -v "hello"
    world
    
  • -V--version:显示grep版本信息
    [root@local ~]# grep -V
    grep (GNU grep) 2.20
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
    
  • --help:查看帮助信息
何为grep命令grep是Linux系统中强大的文本检索工具,它可以使用正则表达式,搜索输入文本中匹配的记录,并输出。grep命令家族包含grep、fgrep、egrep。fgrep相当于grep -F,egrep相当于grep -E。grep 支持BRE、ERE、Perl规范的正则表达式,默认使用BRE。grep语法grep [-options]grep的options选项主要包含...
1、统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 grep是一个文本工具,是通过一行一行来匹配文本进行处理的; 通过grep命令,借助-v参数显示不匹配的行; getent passwd | grep -Ev /sbin/nologin$ 2、查出用户UID最大值的用户名、UID及shell类型 Sort用于排序,添加特定的参数可以根据不同需求排序; head 用户取前几行的; cut 是用于取特定列的; sort -k3 -t“:” -rn 以冒号为分隔符,以第三列进行数字逆序排序; cut -d “:” -f1,3,
n. UNIX工具程序;可做文件内的字符串查找 Linux grep命令用于查找文件里符合条件的字符串 。 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep命令的常用格式为:grep [选项] ”模式“ [文件] grep家族总共有三个:g...
好的,关于 Linux grep使用,你可以参考以下内容: grep 是一种强大的文本搜索工具,可以在文件中查找指定的字符串或模式。下面是一些常用的 grep 命令: 1. 在文件中查找指定字符串: grep "string" filename 例如:grep "hello" test.txt 2. 在多个文件中查找指定字符串: grep "string" file1 file2 file3 例如:grep "hello" test1.txt test2.txt test3.txt 3. 在目录中递归查找指定字符串: grep -r "string" directory 例如:grep -r "hello" /home/user/test/ 4. 查找不包含指定字符串的行: grep -v "string" filename 例如:grep -v "hello" test.txt 5. 查找匹配指定模式的行: grep "pattern" filename 例如:grep "[0-9]" test.txt 6. 查找匹配指定模式的行,并显示匹配的行号: grep -n "pattern" filename 例如:grep -n "hello" test.txt 7. 查找匹配指定模式的行,并显示匹配的上下文: grep -C 2 "pattern" filename 例如:grep -C 2 "hello" test.txt 以上是一些常用的 grep 命令,你可以根据自己的需求进行使用。 ● 0X0005:版本号 ● 0x73:TC_OBJECT 标识,标识写入 Object 对象类型 ● 0x72:TC_CLASSDESC 标识,标识写入 Object 对象的类描述符信息 ○ 写入全限定类名:org.pd.io.Person ■ 0x00 10:标识被 UTF 编码后的字符串长度,这里是 16 字节 ■ 0x6F 72 67 2E 70 64 2E 69 6F 2E 50 65 72 73 6F 6E:16 个字节,表示字符串“org.pd.io.Person” ○ 写入版本号:1386583756403881124,long 类型共 8 字节 ■ 0x13 3E 22 94 7B 7C B4 A4:表示1386583756403881124 ○ 写入标志位:共 8 位标识位, SC_SERIALIZABLE 、 SC_EXTERNALIZABLE 、SC_ENUM 、SC_WRITE_METHOD ■ 0x02:第二位为 1,表示当前类实现了 Serialiable 接口 ○ 写入字段个数:共占 2 字节 ■ 0x00 02:表示只有 2 个字段,即上面的 name 和 age ○ 写入序列化字段: ■ 写入第一个字段( age ) 的类型编码、字段名 ● 0x49:固定 1 个字节,表示字段的 TypeCode,这里表示整形的 I ○ 通过 ObjectStreamField.getTypeCode()获取,常见的包括整形 I、字节 B、布尔 Z、数组 [、类接口 L 等等.. ● 0x00 03:固定 2 个字节,表示字段名长度 ● 0x61 67 65:表示字段名“age” ■ 写入第一个字段( name ) 的类型编码、字段名 ● 0x4C:固定 1 个字节,表示字段的 TypeCode,这里表示 L,表示 class or interface,接口或者类 ● 0x00 04:固定 2 个字节,表示字段名长度 ● 0x6E 61 6D 65:表示字段名“name” ● 0x74:固定 1 字节,标识 TC_STRING,告知后续为字符串值