记忆不行,只能记录
2009年四月
转一篇tr的详细用法
四 26th
1、关于tr
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。
tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
带有最常用选项的tr命令格式为:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
这里:
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
2、字符范围
指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。 [A-Z] A-Z内的字符组成的字符串。 [0-9] 数字串。 \octal 一个三位的八进制数,对应有效的ASCII字符。 [O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
tr中特定控制字符的不同表达方式
速记符含义八进制方式
\a Ctrl-G 铃声\007 \b Ctrl-H 退格符\010 \f Ctrl-L 走行换页\014 \n Ctrl-J 新行\012 \r Ctrl-M 回车\015 \t Ctrl-I tab键\011 \v Ctrl-X \030
3、应用例子
(1)去除oops.txt里面的重复的小写字符
tr -s "[a-z]"<oops.txt >result.txt
(2)删除空行
tr -s "[\012]" < plan.txt 或 tr -s ["\n"] < plan.txt
(3)有时需要删除文件中的^M,并代之以换行
tr -s "[\015]" "[\n]" < file 或 tr -s "[\r]" "[\n]" < file
(4)大写到小写
cat a.txt |tr "[a-z]" "[A-Z]" >b.txt
(5)删除指定字符
一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[a-z]和[A-Z],命令tr -cs “[a-z][A-Z]” “[\012*]” 将文件每行所有不包含在[a-z]或[A-Z](所有希腊字母)的字符串放在字符串1中并转换为一新行。-s选项表明压缩所有新行, -c表明保留所有字母不动。原文件如下,后跟tr命令:
tr -cs "[a-z][A-Z]" "[\012*]" <diary.txt
(6)转换控制字符
tr的第一个功能就是转换控制字符,特别是从dos向UNIX下载文件时,忘记设置ftp关于回车换行转换的选项时更是如此。cat -v filename 显示控制字符。
cat -v stat.txt
box aa^^^^^12^M
apple bbas^^^^23^M
^Z
猜想‘^ ^ ^ ^ ^ ^’是tab键。每一行以Ctrl-M结尾,文件结尾Ctrl-Z,以下是改动方法。
使用-s选项,查看ASCII表。^的八进制代码是136,^M是015,tab键是011,^Z是032 ,下面将按步骤完成最终功能。
用tab键替换^ ^ ^ ^ ^ ^,命令为
"\136" "[\011*]"
。将结果重定向到临时工作文件stat.tmp
tr -s "[\136]" "[\011*]" <stat.txt >stat.tmp
用新行替换每行末尾的^M,并用\n去除^Z,输入要来自于临时工作文件stat.tmp。
tr -s "[\015][\032]" "\n" <stat.tmp
要删除所有的tab键,代之以空格,使用命令
tr -s "[\011]" "[\040*]" <input.file
(7)替换passwd文件中所有冒号,代之以tab键,可以增加可读性
tr -s "[:]" "[\011]" < /etc/passwd 或 tr -s "[:]" "[\t]" < /etc/passwd
(8)使路径具有可读性
如果用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了
echo $PATH | tr ":" "\n"
(9)可以在vi内使用所有这些命令!只要记住:在tr命令前要加上您希望处理的行范围和感叹号 (!),如
1,$!tr -d '\t'
(美元符号表示最后一行)。
(10)另外,当有人给您发送了一个在 Mac OS 或 DOS/Windows 机器上创建的文本文件时,您会发现tr非常有用。
如果没有将文件保存为使用 UNIX 换行符来表示行结束这种格式,则需要将这样的文件转换成本机 UNIX 格式,否则一些命令实用程序不会正确地处理这些文件。Mac OS 的行尾以回车字符(\r)结束,许多文本处理工具将这样的文件作为一行来处理。为了纠正这个问题,可以用下列技巧:
Mac -> UNIX:
tr "\r" "\n"<macfile > unixfile
UNIX -> Mac:
tr "\n" "\r"<unixfile > macfile
Microsoft DOS/Windows 约定,文本的每行以回车字符(\r)并后跟换行符(\n)结束。为了纠正这个问题,可以使用下列命令:
DOS -> UNIX:
tr -d "\r"<dosfile > unixfile
UNIX -> DOS:在这种情况下,需要用awk,因为tr不能插入两个字符来替换一个字符。要使用的 awk 命令为
awk '{ print $0"\r" }'<unixfile > dosfile注:都可以用sed 来完成。
转自:http://blog.chinaunix.net/u/12367/showart_235875.html
另外,这个人的服务器技术相当可以了。他的CU博客主页 http://blog.chinaunix.net/u/12367/index.html
lynx -post-data
四 25th
用lynx POST数据,用法
# cat "data here" | lynx -post-data http://www.xxx.com/post.php
但是这里有个urlencode的问题,经过搜索,得到以下方法
# cat /path/to/file|od -t x1 -A n|tr " " %|awk '{printf "%s",$0}'其中od是把字符转换成ASCII码,-t x1是转为16进制
这样转下来是一个矩形,即od到一定长度会换行
然后用awk把这些行都合并成1行
这边其实还可以用tr删除字符
# cat /path/to/file|od -t x1 -A n|tr " " %|tr -d "\n"
通过mail.139.com的邮件到达短信提醒发送通知短信
四 24th
最近想把一些信息通知到手机上,之前通知到邮件就感觉已经很有用了。
今天搜到一个通过mail.139.com的邮箱的短信提醒来实现。mail.139.com是移动官方的,比较放心。发邮件又比较简单。不过这个东西以后随时可能收费呢。
去mail.139.com注册个邮箱,进入邮箱后找到短信提醒,选择提醒时间段,提醒类型。OK
参考:http://wjd.name/%E4%B8%A4%E4%B8%AA%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95%E5%AE%9E%E7%8E%B0%E5%85%8D%E8%B4%B9%E7%9A%84wordpress%E6%96%B0%E8%AF%84%E8%AE%BA%E7%9F%AD%E4%BF%A1%E9%80%9A%E7%9F%A5/
开启mem_cached高速缓存
四 23rd
Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached快么?
非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。
Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
Memcached的使用
一 Memcached服务器端的安装
Memcached下载地址 http://www.danga.com/memcached/
memcache PHP模块下载地址 http://pecl.php.net/package/memcache 推荐使用1.5版
libevent 下载地址 http://www.monkey.org/~provos/libevent/
1.安装libevent:
# wget http://www.monkey.org/~provos/libevent-1.4.9-stable.tar.gz # tar zxvf libevent-1.4.9-stable.tar.gz # cd libevent-1.4.9-stable # ./configure # make # make install
默认会安装在/usr/local/下,检查安装的文件
# ls -l /usr/local/lib/libevent*
2.安装Memcached
# wget http://memcached.googlecode.com/files/memcached-1.2.8.tar.gz # tar zxvf memcached-1.2.8.tar.gz # cd memcached-1.2.8 # ./configure –with-libevent=/usr/local # make # make install
安装完成后memcached的路径为:/usr/local/bin/memcached
3.安装Memcache的PHP扩展
# wget http://pecl.php.net/get/memcache-2.2.5.tgz # tar zxvf memcache-2.2.5.tgz # cd memcache-2.2.5 # whereis phpize phpize: /usr/local/bin/phpize # /usr/local/bin/phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 # whereis php-config php-config: /usr/local/bin/php-config # ./configure --enable-memcache --with-php-config=/usr/local/bin/php-config # make # make install
安装成功,出现
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/
修改php.ini
extension_dir = “/usr/local/lib/php/extensions/no-debug-non-zts-20060613/”
然后在下面添加:extension=memcache.so 来加载
3.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,
要注意的是如果你的服务器有防火墙的话注意端口问题。
我用的# /usr/local/bin/memcached -d -m 10 -u root
4.如果要结束Memcache进程,执行:
# kill `cat /tmp/memcached.pid`
5.重启apache
提示找不到libevent
用下面命令检查一下
# LD_DEBUG=libs /usr/local/bin/memcached -v
看到加载地址,然后做个软链接
# ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
我的是64bit,所以是
# ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2
这东西适合独立服务器及多个服务器分布的情况安装,虚拟主机不适合,因为安全性问题。
参考文章:
http://www.wordpresschina.com/memcache-optimize-wordpress-under-lunix.html
http://bbs.chinaunix.net/archiver/?tid-1016121.html
http://u.discuz.net/home/space-19362-do-blog-id-17965.html
wordpress 2.7 密码保护文章
四 22nd
记得wp2.7以前有密码保护文章的,2.7后台布局改变后找不到了。
搜了一下,http://wordpress.org/support/topic/248602
在编辑页面右上角,公开度,可选择公开,密码保护,私有。
php备份mysql为.sql格式
四 22nd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php $host="localhost"; //主机名 $user="root"; //MYSQL用户名 $password="root"; //密码 $dbname="dedecmsv4"; //备份的数据库 mysql_connect($host,$user,$password); mysql_select_db($dbname); $q1=mysql_query("show tables"); while($t=mysql_fetch_array($q1)){ $table=$t[0]; $q2=mysql_query("show create table `$table`"); $sql=mysql_fetch_array($q2); $mysql.=$sql['Create Table'].";\r\n\r\n";#DDL $q3=mysql_query("select * from `$table`"); while($data=mysql_fetch_assoc($q3)) { $keys=array_keys($data); $keys=array_map('addslashes',$keys); $keys=join('`,`',$keys); $keys="`".$keys."`"; $vals=array_values($data); $vals=array_map('addslashes',$vals); $vals=join("','",$vals); $vals="'".$vals."'"; $mysql.="insert into `$table`($keys) values($vals);\r\n"; } $mysql.="\r\n"; } $filename=date('Ymd')."_".$dbname.".sql"; //文件名为当天的日期 $fp = fopen($filename,'w'); fputs($fp,$mysql); fclose($fp); echo "数据备份成功,生成备份文件".$filename; ?> |
转自:http://www.readlog.cn/?action=show&id=986
PhpMyadmin下超过2MB的大数据库导入方法
四 22nd
于很多虚拟主机限制了shell权限,给我们带来非常多的不便。这里就介绍一个如何使用phpMyadmin进行大数据库恢复的办法。当然,也有朋友提出使用帝国备份王,我没有测试,下次我测试了会把使用经验发上来。
有专门备份工具做出来备份,导入自然不成问题,比如PW后台1.98M分一卷,导入也用后台那不成问题,除此之外可以选择其他系统后台操作,比如帝国什么的。
今天说的是另一种,用PMA备份的数据超过2M大小,默认的PMA设置只能较小数据导入,否则都容易卡带。操作过的朋友一定知道,大数据导入是比较麻烦的。
第一,如果自己有服务器,或者数据线装入本地,那种问题也简单,借用MYSQL的命令导入
比如放在H:\gutoo.sql,那么导入就是 mysql>source H:\gutoo.sql 就可以了。
第二,也是今天重点要说的,在虚拟机上的超大数据导入, 在一些教程类网站上看到有人自作聪明地修改PHP.ini文件,或者是教大家用命令行工具进行导入,但如果是租用了虚拟主机,没有服务器最高管理权限,无法修改PHP.ini文件,更无法使用命令行该怎么办?其实读读phpMyAdmin在线帮助文档,里面早就说明了这个问题的解决方法。
在phpMyAdmin目录下新建一个目录,如:gutoo,再编辑phpMyAdmin目录下libraries\config.default.php文件,查找$cfg['UploadDir'],将其值写为新建目录的名称,如下所示:
$cfg['UploadDir'] = 'gutoo'; // Directory for uploaded files that can be executed by // phpMyAdmin. For example './upload'. Leave empty for // no upload directory support. Use %u for username // inclusion. $cfg['SaveDir'] = ''; // Directory where phpMyAdmin can save exported data on // server. For example './save'. Leave empty for no save // directory support. Use %u for username inclusion. $cfg['docSQLDir'] = ''; // Directory for docSQL imports, phpMyAdmin can import // docSQL files from that directory. For example // './docSQL'. Leave empty for no docSQL import support. $cfg['TempDir'] = ''; // Directory where phpMyAdmin can save temporary files. // This is needed for MS Excel export, see documentation // how to enable that.
将要导入到数据库的文件上传到刚才新建的gutoo文件夹中,登录phpMyAdmin,选择你的数据库,在右侧窗口中点击“import(导入)”,这时你会发现导入界面中多了一个“网站服务器上载目录”选项,点击下拉箭头,列表里会有刚才上传的文件名称列表。
选中文件,点击右下角的“执行”按钮,等待一段时间(等待的时间与导入文件体积成正比)即可完成“超重”文件的导入。