重定向

此博客已停止更新,新址: http://blog.scicooking.net


2009年1月15日星期四

Regular Expression (POSIX Extended)

Regular Expression (POSIX Extended)

模式的数学定义
给定集合U,若存在映射F,使得S=F(U)并且S⊆U,则映射F就是集合U上的一个模式(pattern).

介绍

注:从 PHP 5.3 开始这个扩展将被废弃,使用性能更好功能更多的 PCRE (Perl-Compatible Regular Expressions) 扩展。
PCRE 包括非贪婪模式、断言、条件子模式等不被 POSIX-extended 规则表达式 支持的语法。

规则表达式用于复杂的字符串操作。


Metacharacters

扩展规则表达式使用的元字符:
| ^ $ . * + ? ( ) [ ] { } \

. 代表任何单个的字符
^ 不匹配任何字符,用来表示一行的开始。比如 ^A 匹配以 A 字母开头的行。
$ 不匹配任何字符,用来表示一行的结束。比如 A$ 匹配以 A 字母结尾的行。
| 或者表达式
* 任何个数
+ 至少一个
? 最多一个

() 表达式分组

[] 范围,字符集
{} 计数器
\ 转义

[括号表达式]
[]方括号表示单个字符或者集合。比如 [ABC] 匹配任何含 A 或者 B 或者 C 的字符串。
如果方括号中首个字符是 ^ 的话,那么这个表达式表示匹配除了这些指定字符以外的字符串。比如 [^ABC] 将匹配不包含 A 和 B 和 C 的字符串。

[:digit:] 数字 0-9, 等价于 [0-9]
[:xdigit:] 16 进制数字 0-9, A-F, a-f.
[:alnum:] 字符数字 0-9 或者 A-Z 或者 a-z. 等价于 [0-9A-Za-z]
[:alpha:] 字母 A-Z 或者 a-z. 等价于 [A-Za-z]
[:blank:] 空白字符,仅空格、TAB.
[:punct:] Punctuation symbols . , " ' ? ! ; :
[:print:] 任何可打印字符,包括空格.
[:space:] 任何空白字符,空格、tab、换行、回车等.
[:graph:] 可打印字符,除了空格
[:upper:] 大写字母 A-Z. [A-Z]
[:lower:] 小写字母 a-z. [a-z]
[:cntrl:] 任何非打印字符


() 表达式组,会被捕获。
(.*) 0个任何个数任何字符。也就是任何东西!
(n|a) n 或者 a
[^a-z] 除了 a 到 z 之外的任何字符串.
注: ^ 作为例外规则仅在 [] 中的第一个字符位置的时候才起作用。不能用做 ^undesired_word 或者 ^(undesired_phrase)。

[_4^a-zA-Z] 下划线、4、^、大小写字母。这个 ^ 作为普通字符。

n? 0 或者 1 个,最多一个 {0,1}
n* 0 或者更多,任意个 {0,}
n+ 1 个或更多,至少一个 {1,}
n{2} 指定个数
n{2,} 不少于指定个数
n{2,4} 在指定的个数之间

?, +, * and the {} 这些计数参数不仅可用于单个字符,也适用于组()和范围[].

例子:

^.{2}[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]{2}a+$

表示:

^.{2} = 任何 2 个字符开头,
[a-z]{1,2} = 跟着 1 个或者 2 个小写字母,
_? = 然后是可选的下划线,
[0-9]* = 接着可能有数字,
([1-6]|[a-f]) = 接着 1 到 6 之间的数字或者 a 到 f 之间的字母,
[^1-9]{2} = 然后是非 1-9 的字符,
a+a+$ = 最后是至少一个 a 结尾.
nbsp; = 最后是至少一个 a 结尾.



正则替换 ereg_replace():

如果使用了分组,那么替换规则中可以用 \数字 引用这些分组。
0 代表匹配到的整个字符串。1-9 按顺序代表分组,最多表示 9 个。
分组可以嵌套,顺序按照开括号顺序计算(也就是最外层的在前)。

例子:
给 URI 字符串加上超链接:
[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]<a href="\0">\0</a>

匹配日期:
([[:digit:]]{4})-[[:digit:]]{2}-[[:digit:]]{2}
([[:digit:]]{4})-([0]?[1-9]|[1][0-2])-([0-2]?[0-9]|[3][0-1])

匹配任何 标签
<[^<>]*>


man regex
http://www.tin.org/bin/man.cgi?section=7&topic=regex
http://www.mkssoftware.com/docs/man5/regexp.5.asp

2009年1月10日星期六

ScribeFire 设置 Blogger 帐号

Windows Live Writer 写 blog 非常好用,而且可以设置 blog,这是微软出的最好的产品。
Ubuntu下目前没有好的替代品。因此拿 Firefox 的扩展 ScribeFire 凑合用吧,不过不能修改 blog 设置。
ScribeFire 设置 Blogger 帐号时,默认设置会提示失败,但没有显示任何具体信息。在试了几次之后发现一尝试登录连接就被重置,应该是我朝伟大的防火墙在起效。好在 Blogger.com 还提供 https 安全连接方式访问。 在 输入 API URL 的时候把 http 改成 https 后一切正常了。

2008年12月9日星期二

Sun xVM VirtualBox 安装和设置

Ubuntu 软件仓库中的 VirtualBox 是开源版本,即 virtualbox-ose, 开源版本缺少一些功能,比如 USB 支持。如果不在乎是否开源可以安装非开源版本。

安装

我们仍然通过方便的软件源安装:
1、添加 key:
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
2、添加软件源:
deb http://download.virtualbox.org/virtualbox/debian intrepid non-free
deb http://download.virtualbox.org/virtualbox/debian hardy non-free
deb http://download.virtualbox.org/virtualbox/debian gutsy non-free
deb http://download.virtualbox.org/virtualbox/debian dapper non-free
deb http://download.virtualbox.org/virtualbox/debian lenny non-free
deb http://download.virtualbox.org/virtualbox/debian etch non-free
deb http://download.virtualbox.org/virtualbox/debian sarge non-free
deb http://download.virtualbox.org/virtualbox/debian xandros4.0-xn non-free

设置

1、要把当前用户加到 vboxusers 组中才能启动 virtualbox:
系统 -> 系统管理 -> 用户和组。先解锁,然后点管理组, 选择 vboxusers 组的属性,加入 当前用户到这个组。
或者命令帮当前用户加到 vboxusers 组:
sudo adduser $USER vboxusers
2、使用 USB 设备:
需要 vboxusers 用户能够存取 /dev/udev 设备权限
让所有用户都有权限访问 usb, 但是不安全, 编辑 /etc/fstab 加上:
# 对所有用户开放USB设备的读写权限
none /proc/bus/usb usbfs devmode=666 0 0

更好的方法: 8.04 hardy 编辑 /etc/udev/rules.d/40-basic-permissions.rules

# USB devices (usbfs replacement)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="vboxusers"
SUBSYSTEM=="usb_device", MODE="0664", GROUP="vboxusers"

3、编辑 /etc/init.d/mountdevsubfs.sh
找到 Magic to make /proc/bus/usb work,把下面几行的注释去掉
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb


重启后就可使用 usb


无法捕获键盘和鼠标输入, 安装 scim-bridge-client-qt
sudo apt-get install scim-bridge-client-qt


参考资料:

2008年12月8日星期一

IEs4Linux 安装

IEs 4 Linux 使用 Wine 模拟器运行。
1、先安装 wine, 如果没有安装, 先按 Wine 安装 这篇文档安装 Wine。另外需要 cabextract
sudo apt-get update && sudo apt-get install wine cabextract
2、下载和安装 IEs 4 Linux:
wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
tar zxvf ies4linux-latest.tar.gz
cd ies4linux-*
./ies4linux



参考资料:

wine 安装

软件仓库中的 wine 升级比较慢,使用 wine 官方源。

图形方式:
1、打开 系统-> 系统管理 -> 软件源, 选择“第三方软件”, 按添加,加入对应版本的源:
Ubuntu Intrepid (8.10):
deb http://wine.budgetdedicated.com/apt intrepid main #WineHQ - Ubuntu 8.10 "Intrepid Ibex"
Ubuntu Hardy (8.04):
deb http://wine.budgetdedicated.com/apt hardy main #WineHQ - Ubuntu 8.04 "Hardy Heron"
2、下载 key: http://wine.budgetdedicated.com/apt/Scott%20Ritchie.gpg 在软件源中选择“身份验证”,按“导入密钥文件...”

-------- NB 的分割线 --------

命令行方式添加:
1、导入密钥文件:
wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
2、添加软件源:
Ubuntu Intrepid (8.10):
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/intrepid.list -O /etc/apt/sources.list.d/winehq.list
Ubuntu Hardy (8.04):
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/hardy.list -O /etc/apt/sources.list.d/winehq.list
3、更新软件源,安装 wine:
sudo apt-get update && sudo apt-get install wine


参考资料:

2008年12月2日星期二

sort 排序 tab 分隔的文件

sort 排序,默认空白(空格,tab)都分开字段。想要在某列上排序 tab 分隔文件,这时候空格不应该作为分隔符。
例子文件:
example.txt:
A 2 1
B 1 0 341
C 3 231

假设排列 第3字段:
sort -k 3 -t "\t" example.txt 报错
sort -k 3 -t ‘\t’ example.txt 报错
sort -k 3 -t \t example.txt 没报错,可是结果不正确
解决方法:
TAB=`echo -e '\t'`; sort -k 3 -t "$TAB" example.txt
或者
sort -k 3 -t $'\t' example.txt
再或者,shell 里可以输入控制字符的,按 ctrl-v, 然后 tab 键就能输入 tab 字符,汗...
sort -k 3 -t "[ctrl-v]+[tab]" example.txt

2008年11月19日星期三

ubuntu 上安装 ibus 输入法

ibus 输入法的安装


deb 包安装:
到其项目网站下载 deb 包。
ubuntu 8.04: http://archive.ubuntu.org.cn/ubuntu-cn/dists/hardy/main/binary-i386/ibus/
ubuntu 8.10: http://archive.ubuntu.org.cn/ubuntu-cn/dists/intrepid/main/binary-i386/ibus/

共 3 个包, ibus 是输入法平台, ibus-pinyin 是拼音输入法, ibus-table 是五笔等其他输入法。python-dbus 是 ibus 依赖的包,ubuntu 系统中有,但版本较低,可能需要安装这个。
依次安装 python-dbus, ibus, 和 ibus-pinyin 或者 ibus-table 即可。

从软件源安装:
加入源,ibus目前还没纳入官方源:
deb http://ubuntu.cn99.com/ubuntu-cn/ hardy main restricted universe multiverse
8.10 把 hardy 改为 intrepid

更新源:
sudo apt-get update

然后搜索软件包
apt-cache search ibus |grep ^ibus
ibus - iBus - Intelligent Input Bus for Linux / Unix OS
ibus-pinyin - ibus-pinyin
ibus-table - IBus-Table


安装 ibus:
sudo apt-get install ibus

安装输入法:
sudo apt-get install ibus-pinyin
或者
sudo apt-get install ibus-table


安装完后启用 ibus:
im-switch -s ibus
注销用户,重新登录。

ibus 图标会出现在通知栏。这时候按 ctrl+空格会提示没有安装任何输入法。

右键-->首选项(或运行 ibus-setup)调出选项,在“输入法引擎”里启用需要的输入法即可。

项目主页: http://code.google.com/p/ibus/