分页: 1 / 1
死活去不掉空行的pl。谁试试。
发表于 : 2008-04-05 1:36
由 eexpress
#!/usr/bin/perl -w
$home=$ENV{HOME};
#~/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml
#<bookmark title="/home/exp/媒体/●电影">/home/exp/媒体/●电影</bookmark>
print "=====rox书签\n";
if (open(BM, "$home/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml")) {
while ($line = <BM>) {
if ($line =~ /title/){
$line =~ s/<[^>]*>/\n/g;
$line =~ s/&#x([[:xdigit:]]+);/chr(hex($1))/ge;
$line =~ s/^$home/~/mg;
# $line =~ s/^\s*//mg;
# $line =~ s/\s*$//mg;
# $line =~ s/[\x0A]+/\n/mg;
$line =~ s/^\s*$//mg;
print $line;
}
if (eof) {close (BM);last;}
}
}
发表于 : 2008-04-06 12:38
由 eexpress
☎ cat ~/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml
<?xml version="1.0"?>
<bookmarks>
<bookmark title="/home/exp/媒体/●电影">/home/exp/媒体/●电影</bookmark>
<bookmark title="/home/exp/媒体/●音乐">/home/exp/媒体/●音乐</bookmark>
<bookmark title="/home/exp/下载">/home/exp/下载</bookmark>
<bookmark title="/home/media">/home/media</bookmark>
<bookmark title="/home/exp/应用/脚本">/home/exp/应用/脚本</bookmark>
<bookmark title="/home/exp/.fvwm">/home/exp/.fvwm</bookmark>
<bookmark title="/media">/media</bookmark>
<bookmark title="/home/exp/文档/设计资料/瑞萨">/home/exp/文档/设计资料/瑞萨</bookmark>
<bookmark title="/home/exp/project/easy-account">/home/exp/project/easy-account</bookmark>
<bookmark title="/home/exp/下载/torrent-files">/home/exp/下载/torrent-files</bookmark>
<bookmark title="/home/media/●动画">/home/media/●动画</bookmark><bookmark title="/home/exp/媒体/房屋装饰图片">/home/exp/媒体/房屋装饰图片</bookmark><bookmark title="/home/exp/媒体/●图标">/home/exp/媒体/●图标</bookmark><bookmark title="/usr/local/bin">/usr/local/bin</bookmark><bookmark title="/home/exp/test test">/home/exp/test test</bookmark></bookmarks>
发表于 : 2008-04-06 14:16
由 RegentW
只是为了在console中显示的话,忽略空行就行了吧
发表于 : 2008-04-06 17:26
由 eexpress
空行是正则产生的。为了后面的处理,最好是去掉。可$line =~ s/^\s*$//mg; 就是去不掉。
另外的2个文件,也类似操作,这样一行就去掉了。
管道挂sed,用/^\s*$/d就去掉了。只是不想这样。
发表于 : 2008-04-06 21:31
由 RegentW
这一行
代码: 全选
$line =~ s/<[^>]*>/\n/g;
改成
代码: 全选
$line =~ s/<[^>]*>//g;
如何
发表于 : 2008-04-06 23:36
由 eexpress
有一个你没想到的事情。就是那xml文件的最后一行,是几个标识连一起的。如果这样,就后面的路径都放一行了。
这种不规范,应该是系统造成的。我只好迁就他。
你可以试试2楼的xml。1楼的pl改这xml的地址,就知道了。
发表于 : 2008-04-07 8:40
由 RegentW
这个怎样
代码: 全选
#!/usr/bin/perl -w
$home=$ENV{HOME};
#~/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml
#<bookmark title="/home/exp/媒体/●电影">/home/exp/媒体/●电影</bookmark>
print "=====rox书签\n";
if (open(BM, "$home/.config/rox.sourceforge.net/ROX-Filer/Bookmarks.xml")) {
local $/=undef;
$line = <BM>;
$line =~ s/<[^>]*>/\n/g;
$line =~ s/&#x([[:xdigit:]]+);/chr(hex($1))/ge;
$line =~ s/^\s*$//mg;
$line =~ s/\n+/\n/mg;
print $line;
}
发表于 : 2008-04-07 9:15
由 eexpress
local $/=undef; 是什么意思啊。没懂。这样 $line = <BM>; 读入了全部?那不是可以@line读入了。这样全部一起处理的,正常多了。
print行,老出这提示。你知道为什么吗
Wide character in print at t.pl line 15, <BM> chunk 1.
另外,你能帮忙写一个针对2楼xml的XML::Simple或者Twing的例子不。

发表于 : 2008-04-07 9:47
由 RegentW
$/ - The input record separator, newline by default.
这样 $line = <BM>; 读入了全部?那不是可以@line读入了。这样全部一起处理的,正常多了。
是可以
print行,老出这提示。你知道为什么吗
Wide character in print at t.pl line 15, <BM> chunk 1.
意思是Perl遇到了>255的字符,可以在脚本中加入一行
代码: 全选
binmode STDOUT, ':utf8';
发表于 : 2008-04-07 9:57
由 eexpress
pl还是晦涩啊。没看过的东西,完全是晕的。
那XML的模块,拜托写一个哦。例子而已。

发表于 : 2008-04-07 13:06
由 RegentW
我水平很一般的,写脚本时也经常要看perldoc或上网搜

发表于 : 2008-04-09 9:09
由 eexpress
可惜啊。论坛少有喜欢perl的。也没#perl-cn的irc。奇怪了。几次到#perl问,都是说一大堆,最终别人都推荐用模块。其实我不喜欢一个小事,也用模块。写的东西,不通用了。
发表于 : 2008-04-09 9:44
由 RegentW
我有时就是喜欢reinvent the wheel
一方面可以自己学到东西 同时更适合自己的特殊需要
发表于 : 2008-04-09 10:20
由 eexpress
其实。perl是太成熟了。没东西搞了。什么样的脚本,都有。别人早发布了。等我想搞的时候,找不到和我一样档次的。呵呵。
yaoms才找了一个irssi的osd显示的脚本。都现成的。他改了一个很简单的。
发表于 : 2008-04-09 12:39
由 RegentW
是呀 正因为已经非常成熟 所以除了CPAN还有丰富的支持 想解决什么问题的话 到网上google一下很快搞定