bash 中的正则表达式

类似

$ps ax | grep -v grep | grep httpd | tr -s ‘ ‘ | cut -d ‘ ‘ -f1

的方法来取得pid确实还挺好用的,不过今天要取得这个程序执行了多长时间,这个就麻烦了,因为时间中间有空格
翻了半天的man还是没好的解决方案,换了台机器,ubuntu 的,发现 ps 有不小的区别,可以这样:

$ps -eo pid,lstart,args | grep httpd | grep -v grep
2374 Wed Sep 13 00:41:59 2006 /usr/local/httpd/bin/httpd -k restart
2469 Wed Sep 13 00:42:03 2006 /usr/local/httpd/bin/httpd -k restart
22470 Wed Sep 13 00:42:03 2006 /usr/local/httpd/bin/httpd -k restart
22472 Wed Sep 13 00:42:03 2006 /usr/local/httpd/bin/httpd -k restart
22474 Wed Sep 13 00:42:03 2006 /usr/local/httpd/bin/httpd -k restart

其中最前面的数字是pid 中间 Wed Sep 13 00:41:59 2006 是开始时间,后面的所有是”args” (linux下面的ps有lstart这个参数)
这个就麻烦了,args自然只是为了匹配进程特征,中间的时间才是我要的东西。
再找找关于grep的说明(这些小工具都强到一种境界,据说一个sed就写了一本书),一个 -o 参数搞定

$pid=ps -eo pid,lstart,args | grep httpd | grep -v grep | egrep -o ^\ ?[0-9]+\

注意最后有一个空格 “\ ” 这样比较保险一点
发现出来的内容

2374
2469
22470
22472
22474

有空格,加一个 tr:

$pid=ps -eo pid,lstart,args | grep httpd | grep -v grep | egrep -o ^\ ?[0-9]+\ | tr -d ‘ ‘

同理时间也就简单了:

$ps -eo pid,lstart,args | grep httpd | grep -v grep | egrep -o \ [A-Z][a-zA-Z0-9\ :]+\ [0-9]{4}

转换成时间戳:

$ps -eo pid,lstart,args | grep httpd | grep -v grep | egrep -o \ [A-Z][a-zA-Z0-9\ :]+\ [0-9]{4} | ……

操,卡住了,做的时候都是传的变量。。。

幸好高人(hightman)指点

$ps -eo pid,lstart,args | grep httpd | grep -v grep | egrep -o \ [A-Z][a-zA-Z0-9\ :]+\ [0-9]{4} | xargs -ishit date -d “shit” +%s
1157349945
1158050727
1158144618
1158145964
1158147191

在MacosX安装fontconfig-2遇到的问题

make install 遇到这样的提示

dyld: Symbol not found: _FSPathMakeRef
Referenced from: /usr/local/lib/libfreetype.6.dylib
Expected in: flat namespace

实际上是运行 fc-cache 时出现的问题,实际上就是freetype没有安装好,只要重新安装一次freetype,在 ./configure 加上一句 –with-old-mac-fonts 然后 make clean;make;make install 搞定。

我是看这里找到的解决方法:
http://mail-index.netbsd.org/pkgsrc-bugs/2006/06/28/0019.html