SuperTaoer::Thanksgiving

不论什么情况,当你决定了,就不要再留有机会,值得留恋的以后还会在一起,至于不值得的,也就不带走什么了。

一月 25, 2008

linux下批量对文件内容进行替换

文章类别: 程序 技术 — SuperTaoer @ 3:52 pm

今天工作需要,其实就是一行命令,
比如要将所有包含abc文件里面的abc替换为def

  1. find -type f | xargs perl -i -pe s%abc%def%g

如果要把子目录的内容一起替换

  1. ls -R | xargs perl -i -pe s%abc%def%g


一月 19, 2008

哪儿来的,滚回哪去。。。!!!

操。。。

正所谓江山易改,本性难移,什么JB人还就是什么JB人,想什么做什么都tmd带着JB意识!!!

想把JB人感化成、变成B人,那是他妈B的痴心妄想。。。

谁都TMD信不过。。。只有自己靠自己!!!

爱谁谁。。。所有人都受伤,把tmd自己保护好就行。。。

什么tmd友情啊。。。感情啊。。。这JB情那B情啊。。。都TMD的扯蛋!!!


我操
我狂操

就tmd那么点儿事儿,有tmd什么好内什么的!!!
操。。。JB人,JB意识!!!
B人,B意识!!!

想开了,想通了。。。还是tmd管好自己吧。。。

操,粗的段子骂完了,再tmd瞎JB钻两句:

人生短短几十载,
悲也过,喜也过。
莫看他人眼与脸,
我的人生我来过。

前程遥遥无尽头,
走一步,看一步。
怀揣一颗平常心,
喜怒哀乐似云烟。

金钱诱惑逼绝路,
贫不愁,富不欢。
大事小事天下事,
我最关心自己事。

春夏秋冬又轮回,
冷不惊,热不燥。
为人处世多圆滑,
冷暖自知莫道明。

写的什么玩艺儿啊,平仄都tmd不押韵,凑合了。。。

一月 8, 2008

linux shell脚本给特定的目录批量进行操作

文章类别: 程序 技术 — SuperTaoer @ 5:56 pm

因为服务器的cvs目录暴露在web目录下,通过 www.xxxxx.com/.cvs 就可以浏览到里面的内容,
传说中的及其的不安全。。。

无奈没有root权限,不能修改apache的httpd.conf

只得曲线救国,在每个.cvs目录下touch index.html
本来想手工做,无奈目录太多,还是批量一下儿吧。。。

  1. #!/bin/sh
  2.  
  3.  
  4. foreach_dir() {
  5.  
  6.     #for file in `./th.perl`
  7.     for file in $1/*
  8.     do
  9.  
  10.         if [ -d $file ]; then
  11.  
  12.             if echo $file | grep ".cvs" > /dev/null
  13.             then   
  14.  
  15.                 #echo "" > /dev/null
  16.                 echo "touch $file/index.html"
  17.                 touch $file/index.html
  18.             fi     
  19.  
  20.             foreach_dir $file
  21.         else   
  22.  
  23.             echo "" > /dev/null
  24.  
  25.         fi     
  26.     done   
  27. }
  28.  
  29. #foreach_dir $1
  30. #foreach_dir `find ./ -name .cvs* -type d`
  31.  
  32. for f in `find ./ -name .cvs* -type d`
  33. do
  34.  
  35.     echo "touch $f/index.html"
  36.     touch $f/index.html
  37.     foreach_dir $f
  38. done

这个伟大的脚本在今天下午下班前就这么tmd诞生了。。。

顺便说一下修改apache的方法。。。
就是找到 Options
类似 Options Indexes Includes FollowSymLinks MultiViews 这样儿的吧。。。
把其中的 Indexes 变成: -Indexes
Options -Indexes Includes FollowSymLinks MultiViews
就好了。。。
郁闷~~~还是能配置apache比较好。。。

一月 3, 2008

mysql导出成excel格式的文件

文章类别: 程序 技术 — SuperTaoer @ 4:01 pm

这里不讲如何用php到处,只是用mysql的命令和shell结合来导出。。。

方法一:进入到mysql的控制台,输入:

  1. SELECT * INTO OUTFILE './test.xls' FROM tb1 WHERE 1 ORDER BY id DESC  LIMIT 0, 50;

这样,应该会在你的mysql的var/目录下产生一个test.xls的文件。。。
但是如果你的shell的登录帐户和mysql的运行账户不同,很可能这个方法就不适用了,因为你可以通过mysql控制台来产生这个文件,但是你却没有办法通过shell来对这个文件进行操作,因为用户不同,没有访问权限。

这个时候,同事告诉偶滴办法就重装登录了!!!

  1. echo "SELECT * FROM tb1 WHERE 1 ORDER BY id DESC LIMIT 0, 50;"| /usr/local/mysql/bin/mysql -hlocalhost -uroot -pxxxxx > /tmp/test.xls

ok,把你的test.xls文件从tmp下载到本地打开来看看吧。。。
什么?中文乱码?
别着急。。。
因为office默认的是gb2312编码,服务器端生成的很有可能是utf-8编码,这个时候你有两种选择,
1.在服务器端使用iconv来进行编码转换,

  1. iconv -futf8 -tgb2312 -otest2.xls test.xls

如果转换顺利,那么从server上下载下来就可以使用了。
转换如果不顺利,则会提示:iconv: illegal input sequence at position 1841 类似于这样的错误,
先把test.xls下载下来,这个时候文件是utf-8编码的,用excel打开,乱码。
把test.xls以文本方式打开,然后另存为,在编码选择ANSI编码,保存。

ok,再用excel打开,乱码问题,烟消云散。。。

mysql where子句的模式匹配

文章类别: 程序 技术 — SuperTaoer @ 12:11 am

今天在应用中遇到了这样的一个问题,
有一个字段 t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2

需要从里面搜索出比如说:第一个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间。。。

则sql语句可以这么写:

  1. SELECT * FROM tb WHERE t1 REGEXP '^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';

便可以实现需求。。。以前一直用like,刚知道mysql也有正则表达式,很是方便。。。
我爱正则表达式。。。hoho~~~

下面转载一片专门介绍myslq正则表达式的文章:

1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);

2. 模式默认是忽略大小写的;

3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);

MySQL还提供象UNIX实用程序的扩展正则表达式模式匹配的格式:

1. 使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,他们是同义词);

2. REGEXP模式匹配与被匹配字符的任何地方匹配,则匹配成功(即只要被匹配字符包含或者可以等于所定义的模式,就匹配成功);

不同于LIKE模式匹配,只有和整个值匹配,才匹配成功(即只有被匹配字符完全和所定义的模式匹配,才匹配成功)

3. REGEXP默认也是不区分大小写,可以使用BINARY关键词强制区分大小写;

如:SELECT * FROM pet WHERE name REGEXP BINARY ‘^B’;

4. 正则表达式为一个表达式,它能够描述一组字符串。REGEXP操作符完成MySQL的扩展正则表达式匹配。REGEXP实现的功能是如果被匹配字符中部分或完全符合所定义的表达式描述的字符,则表示匹配成功。

1)最简单的正则表达式是不含任何特殊字符的正则表达式,如hello。

SELECT * FROM pet WHERE name REGEXP ‘hello’;表示的意思是如果name这列的某一行包含hello这个单词,则匹配就成功了。(注意和LIKE的区别,LIKE要求name这列的某一行必须完全等于hello,才匹配成功)。

2)非平凡的正则表达式,除了含有最简单表达式那些东西,还需要采用特殊的特殊结构,用到的字符,往下看。(因此,通常的正则表达式是普通单词和这些正则表达式字符构成的表达式)

5. 扩展正则表达式的一些字符:

1) ‘.’匹配任何单个字符;

2) […]匹配在方括号内的任何字符,可以使用’-’表示范围,如[a-z],[0-9],而且可以混合[a-dXYZ]表示匹配a,b,c,d,X,Y,Z中的任何一个;(注意使用括号以及’|’的方法也可以达到相同的效果,如(a|b|c)匹配a,b,c中的任何一个);此外可以使用’^’表示否定,如[^a-z]表示不含有a-z中间的任何一个字符;

3) ‘*’表示匹配0个或多个在它前面的字符。如x*表示0个或多个x字符,.*表示匹配任何数量的任何字符;

4) 可以将模式定位必须匹配被匹配字符的开始或结尾,在匹配模式前加”^”:表示匹配从被匹配字符的最开头开始,在匹配模式后加”$”:表示匹配要进行到被匹配字符的最末尾。

5) ‘+’表示匹配1个或多个在它前面的字符。如a+表示1个或多个a字符。

6) ‘?’表示匹配0个或1个在它前面的字符。如a?表示0个或1个a字符。

7) ‘|’如de|abc表示匹配序列de或者abc。注意虽然[…]也可以表示匹配中的某一个,但是每次仅仅能表示单个字符及[a-bXYZ]实际每一次只代表了一个字符。

8) ()括号可以应用在表达式中,使得更容易理解。

9) a{5}表示匹配共5个a,a{2,8}表示匹配2~8个a。

a*可以写成a{0, } 第二个参数省略表示没有上界;a+可以写成a{1,};a?可以写成a{0,1}

更准确地讲,a{n}与a的n个实例准确匹配。a{n,}匹配a的n个或更多实例。a{m,n}匹配a的m~n个实例,包含m和n
m和n必须位于0~RE_DUP_MAX(默认为255)的范围内,包含0和RE_DUP_MAX。如果同时给定了m和n,m必须小于或等于n。

10) 标准类别[:character_class:]:

常用的一些标准类别,一般在[]中使用,由于用在[]中故和[a-z]类似,每一次只能顶替一个字符。(这个有点类似perl里面定义的常用的一些标准类别:\w表示一个单词字符即[a-zA-Z0-9];\W一个非单词字符与\w相反; \d一个数字即[0-9];\D一个非数字;\s一个白空间字符即[\t\f\r\n];\f为换页符;\S一个非白空间字符)

标准的类别名称:

alnum
文字数字字符

alpha
文字字符

blank
空白字符

cntrl
控制字符

digit
数字字符

graph
图形字符

lower
小写文字字符

print
图形或空格字符

punct
标点字符

space
空格、制表符、新行、和回车

upper
大写文字字符

xdigit
十六进制数字字符

使用实例:

SELECT ‘justalnums’ REGEXP ‘[[:alnum:]]+’;
解释其中[[:alnum:]]由于[:alnum:]表示文字数字字符,它又用在[]中,故[[:alnum:]]代表一个字符它为一个文字或者数字。后面的+号表示1个或多个这样的文字或数字。

上述语句返回1.那是因为justalnums中是由字母组成的。

11)字边界:[[:<:]]表示开始,[[:>:]]表示结束:

其定义了一个单词的开始和结束边界,这个单词为字字符,这样[[:<:]]代表这个字字符前面的部分,[[:>:]]代表这个字字符后面的部分。字字符为alnum类的字母数字字符或下划线(_);因此[[:<:]], [[:>:]]均代表不是字字符的字符,即只要不是字母数字字符以及下划线(_)即可。因此其可以为什么都不是。因此[[:<:]]word[[:>:]]能够匹配如下的所有情况:

即word单词本身,word*** 解释***代表不是字母数字以及_的任何字符(如,word-net);***word(如,micorsoft word);***word***(如,this is a word program.)

举例:[[:<:]]word[[:>:]]:

SELECT ‘a word a’ REGEXP ‘[[:<:]]word[[:>:]]’; 结果为真
SELECT ‘a xword a’ REGEXP ‘[[:<:]]word[[:>:]]’; 结果为假

最后注意的注意:
要在正则表达式中使用特殊字符,需要在这些字符前面添加2个反斜杠’\’,
举例:
SELECT ‘1+2′ REGEXP ‘1+2′; 结果为0
SELECT ‘1+2′ REGEXP ‘1\+2′; 结果为0
SELECT ‘1+2′ REGEXP ‘1\\+2′; 结果为1
解释:
这是因为MySQL解析程序解析该SQL语句时:
首先将字符串’1\\+2’解析为1\+2;
然后把1\+2当作正则表达式,由正则表达式库来解析,它代表1+2。
因此需要加上2个反斜杠。

不要经常犯加一个反斜杠的错误,加一个反斜杠会莫名其妙:
如SELECT ‘1t2′ REGEXP ‘1\t2′;
结果会返回1
本来的意思是匹配1制表符\t以及2,但是由于只添加了一个\所以,解析以后编程了1t2,所以匹配成功。
12)
[.characters.]和[=character_class=]




本站使用 WordPress架设