xlid 发表于 2018-8-29 06:01:56

shell命令之(一) 初探grep

  我一直秉持的观点就是用到啥就学啥,很所博客都列举了grep的所有选项,乍一看30个左右!话说回来,能都记住当然好啦,但是那样所花的时间按成本太高了,好了言归正传:
  首先创建一个测试文件:a.txt
  # cat a.txt
  hell88
  hello
  Hello
  nice
  world
  12345
  (1) -v选项:--revert-match   #显示不包含匹配文本的所有行。这的v是小写的,我们知道大写V基本都是查询版本信息的,这里也不例外
  example:
  我要提取全是数字的行:
  # grep -v a.txt
  12345
  #这里得注意了,通配符是匹配单个字符!之前想当然的这样写:grep [^a-z]a.txt
  # grep[^a-z] a.txt
  hell88
  12345
  Hello
  结果提取出的为不全是小写字母的行
  (2)-r选项:-r 递归查询,此处不作赘述
  (3)-i选项:忽略字母大小写
  example:
  # grep -i h a.txt
  hell88
  hello
  Hello
  (4)很多时候,我们需要过滤的条件有多个,那么我们是用管道连接多个grep?显然不是,这就要用到我们的-E选项了:
  example:
  提取不以h(不论大小写)开头且不含数字的行?
  # grep -vEi "^h|" a.txt
  nice
  world
  (5)-c选项:--count   #计算符合样式的行数
  example:
  我们查看mysql进程数:
  # ps -ef|grep mysql -c
  3
  (6)-q选项:-q   --quiet或--silent   #不显示任何信息。
  问题来了,既然它不显示任何信息,你是不是想说其然并卵?
  可事实上他非常有用!可以应用于脚本中的逻辑判断。
  example:
  我要判断a.txt中是否有helloworld,有就输出yes否则输出no
  # ifgrep -q helloworld a.txt;then echo yes;else echo no;fi
  no
  (7)-o选项:--only-matching: #只显示匹配到的部分
  (8)-P选项:--perl-regexp:      #利用perl的正则语法进行匹配
  其实perl的正则语法很多和shell正则语法深度一致。这里列举两个perl正则:
  \d+         匹配多个数字字符串,和 + 语法一样
  \w         英文字母或数字的字符串,和 语法一样
  perl正则判断当前位置的前后字符,是否符合指定的条件,但不匹配前后的字符:

  比如:
  echo " mynamehelloworld321"|grep -Po"(?
页: [1]
查看完整版本: shell命令之(一) 初探grep