Perl中的正则表达式起步之三

    作为了一个DBA, 在接触了正则表达式后, 深深为其所打动, 利用正则表达式可以轻松地简化很多的工作, 并开发出别人刮目相看的工具. 下面简单地写几个例子:

    1, 在sed, grep, vi等工具中使用, 下面的例子是grep和vi中删除空行及用sed替换ALTER后面的一个单位为INDEX.

grep -v '^\s*$' cr.sql
egrep -v '^\s*$' cr.sql
vi: g/^\s*$/d
sed 's/ALTER [A-Z]+/ALTER INDEX/g' cr.sql

    2, 在Perl程序中使用, 可以用于字符串比较或替换, 下面的例子中将CREATE TABLE或INDEX语句中的表名替换掉, 就这一点用其他的语言来实现的话就要写很多的代码了.

$create_syntax = "CREATE TABLE OLD_TABLE(COL1 NUMBER)";
if ($create_syntax =~ m/CREATE (TABLE|INDEX)/ )
{
   print("Matched\n");
   $create_syntax =~ s/CREATE (\w+) (\w+)/CREATE $1 new_name/g;
}
print($create_syntax, "\n");

    3, 用于进行字段分隔, 下面的例子将用不同分隔符分隔的文本取出来.

my $line = "   col1 col2|col3#col4   ";
my @cols = ($line =~ /\s+(\w+)\s+(\w+)\|(\w+)#(\w+)\s+/ );
print($cols[0],"|",$cols[1],"|",$cols[2],"|",$cols[3], "\n");

$line = "col1 col2     col3    col4   ";
@cols = split '\s+', $line;
$"="|";
print "@cols\n";

    如此强大, 你还不学一学?

留言 (1)

是挺强的,我会用它来处理文本和批量改文件名什么的

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I want an apartment with two bedrooms and a kitchen.
  • 我想要一套有两间卧室和一个厨房的公寓.
  • The houses downtown are very expensive.
  • 市区的房子很贵.
  • How much is the rent for a month?
  • 每月租金多少?
  • I feel at home living here. The landlady is very kind to me.
  • 我觉得住在这里象在家里一样. 房东太太对我很好.
  • We have a few kitchen things and a dining room set.
  • 我们有一些厨房用具和一套餐厅设备.