shell grep 查找进程的小技巧

大部分人在写Shell 过滤进程的时候 都会使用 grep 在 ps aux 的输出结果中查找指定的进程,但此时也会把 grep 进程也显示出来 比如查找 pptpd 进程,会匹配出来两条:

代码如下:

[root@selboo ~]# ps aux | grep pptp
root 20191 0.0 0.2 5108 704 pts/2 R+ 16:58 0:00 grep pptp
root 22054 0.0 0.1 1952 608 ? Ss Oct22 0:00 /usr/sbin/pptpd

常见的防止grep进程出现的方法就是在对加一个管道 grep -v grep 进行过滤:

代码如下:

[root@selboo ~]# ps aux | grep pptp | grep -v grep
root 22054 0.0 0.1 1952 608 ? Ss Oct22 0:00 /usr/sbin/pptpd

还有一个更方便的方法是用 正则 grep [p]ptpd来搜索pptpd这个进程:

代码如下:

[root@selboo ~]# ps aux | grep [p]ptp
root 22054 0.0 0.1 1952 608 ? Ss Oct22 0:00 /usr/sbin/pptpd

虽然说它比 grep -v grep 也未必方便多少,但是如果用大量循环的监控脚本上,每次都能减少一次系统grep调用,也就是减少一次创建进程,虽然提升很小可以忽略不计,但是用在shell写的监控脚本上来说多少还有点提升的,优化就是注重细节嘛。

以下是执行五次测试结果:

使用grep -v grep 方式


代码如下:

[root@selboo etc]# time for (( i=1; i<=200; i++ )) ;do ps aux | grep pptp | grep -v pptp &>/dev/null; done
real 0m1.487s 0m1.475s 0m1.488s 0m1.497s 0m1.499s
user 0m0.335s 0m0.328s 0m0.334s 0m0.326s 0m0.312s
sys 0m0.766s 0m0.757s 0m0.772s 0m0.784s 0m0.795s

使用正则方式


代码如下:

[root@selboo etc]# time for (( i=1; i<=200; i++ )) ;do ps aux | grep [p]ptp &>/dev/null; done
real 0m1.306s 0m1.344s 0m1.303s 0m1.298s 0m1.329s
user 0m0.343s 0m0.313s 0m0.326s 0m0.274s 0m0.322s
sys 0m0.742s 0m0.801s 0m0.753s 0m0.798s 0m0.784s

时间: 2013-01-22

一天一个shell命令 linux文本内容操作系列-grep命令详解

从这篇开始,是文本内容操作,区别于文本操作. Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. shell,perl,python,一直都是文本操作的专家语言,而我们今后学习的的将是shell的噱头--文本操作.下面提到最常见的一个: grep 这算是文本内容的一个重量级选手,能根据某些规格在上千行的文本文件中查找

详解 Shell中的grep命令

用'grep'搜索文本文件 如果您要在几个文本文件中查找一字符串,可以使用'grep'命令.'grep'在文本中搜索指定的字符串.举个例子:假设您正在'/usr/src/linux/Documentation'目录下搜索带字符串'magic'的文件: $ grep magic /usr/src/linux/Documentation/* sysrq.txt:* How do I enable the magic SysRQ key? sysrq.txt:* How do I use the ma

Shell正则表达式之grep、sed、awk实操笔记

最近一直在研究shell脚本这块,刚好闲下来整了下自己手头上比较好的资料中的一些范例,以下是我整理的鸟哥私房菜里面正则表达式里面比较基础的一些语法详解,适合新手查阅. 首先先复制一段范例: 复制代码 代码如下: # vi regular_express.txt ------------------------------- "Open Source" is a good mechanism to develop programs. apple is my favorite food.

Shell正则表达式学习笔记

正规表示法(或称为常规表示法)是透过一些特殊字符的排列,用以搜寻/取代/删除一列或多列文字字符串, 简单的说,正规表示法就是用在字符串的处理上面的一项『表示式』.正规表示法并不是一个工具程序, 而是一个字符串处理的标准依据,如果您想要以正规表示法的方式处理字符串,就得要使用支持正规表示法的工具程序才行, 这类的工具程序很多,例如 vi, sed, awk 等等. 一.正则表达式是什么? 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作. 二.

shell脚本之正则表达式、grep、sed、awk

--正则-- 基础正则 ^word     ##搜索以word开头的 vi/vim中 ^ 一行的开头 word$     ##搜索以word结尾的 vi/vim中 $ 一行的结尾 ^$        ##表示空行 .         ##代表且只能代表任意一个字符 \         ##例:\. 只代表点本身,转义符号,让有特殊身份意义的字符,脱掉马甲,还原 \n        ##换行符 \r        ##匹配回车 \w         ##匹配任意一个字符和数字 *        

linux grep正则表达式与grep用法详解

需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名 参数说明: -a:将二进制文档以文本方式处理 -c:显示匹配次数 -i:忽略大小写差异 -n:在行首显示行号 -A:After的意思,显示匹

nodejs脚本centos开机启动实操方法

node环境的安装便不再赘述了,网上有很多教程,也非常简单. 这一篇是使用pm2实现nodejs的自动重启. 什么是pm2? 如官网介绍的,pm2是nodejs下先进的,生产进程管理器.如性能监控,自动重启.负载均衡等等. 关于pm2的更多教程,请移步pm2官方文档 1.请确保安装了node 2.安装pm2 npm install pm2 -g 3.使用pm2启动server文件 *请注意将start后边的地址改为自己的文件地址 pm2 start /api/server.js --name="

JavaScript正则表达式迷你书之贪婪模式-学习笔记

贪婪模式: 在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数,比如:"{m,n}", "{m,}", "?", "*", "+",具体匹配的次数随被匹配的字符串而定.这种重复匹配不定次数的表达式在匹配过程中,总是尽可能多的匹配 非贪婪模式: 在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表

UNIX/LINUX SHELL 正则表达式语法详解附使用方法

几乎所有重要问题都需要从无用数据中过滤出有用数据.了解大量的 UNIX? 命令行实用工具如何使用正则表达式 来去芜取精. 非常奇怪,直到今天我仍然能重复周六早上的经典歌曲"Conjunction Junction".这是好事(看了太多电视)还是坏事(也许是我现在职业的先兆)仍然有待讨论.不管怎样,这首小调在欢快的节奏下传递了基本的信息. 我还没有为学习 UNIX 构想出与"Conjunction Junction"相似的作品,但是我会在未来的几个月里尝试亲手编写这样

linux shell 正则表达式(BREs,EREs,PREs)差异比较

在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容.许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎.正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的.正则表达式通常缩写成"regex",单数有regexp.regex,复数有regexps.regexes.regexen.这些

shell 正则表达式详细整理

正则表达式的分类 1.基本的正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs) 2.扩展的正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs) 3.Perl的正则表达式(Perl Regular Expression 又叫Perl RegEx 简称PREs) 具体的可以参考这篇文章:http://www.jb51.net/tools/shell_regex.html shell常