[perl]可否实现使用一条语句实现这样的模式替换? my $str="{abcd}";#以{}括起来的字符串,必须以"{"开始以"}"结束。 if($str匹配并替换) { #此时$str应该等于"abcd" } 当$str="{abc}d"等等时则不进行匹配替换,即上面的if语句中"$str匹配并替换"为false。 这样的替换可否实现?即:通过一个if语句既实现条件匹配判断又同时实现匹配的替换。
文件file内容如下: 123\|||456 需要替换成123||456 用sed 可以实现: sed 's/\\|||/||/' file 但perl却有问题: perl -p -e 's/\\|||/||/' file 结果: ||123\|||456 请教各位:用perl如何写?谢谢!
比如IP地址的配置文件eth0 IP=192.168.1.1 怎么用perl替换掉里面的IP地址? #!/usr/bin/perl use strict; use warnings; my ($ip) = (`/sbin/ifconfig eth0` =~ /inet addr:(\d+\.\d+\.\d+\.\d+)/);
编程中遇到一个小的技术问题,希望高人指点。 一个很长的字符串,例如 3121 147 15 153 16 160 232046 130 14 155 362016 190 1942020 1892010**** 35 35 342022 77 3201300130210001272001 154 1582046 1402010 137 1372058 1322026 170 184 192 193 180 189 201 196////////////////////// 这个字符串我需要进行分割成小的字符串,但是分割的小字符串长度不固定,我通过XML文件定义了每一个小字符串的长度和名...
读入一个文件进行匹配,其中一行: connUnitStatusChange TRAP-TYPE #(此行开头是空格) 我用 $line =~ /connUnitStatusChange\s.*/可以匹配 可是用 $line =~ /connUnitStatusChange.*/ 似乎把前面的行都匹配进来了(具体我不知道是不是)。 请问这两种表达方式有什么不一样?
各位,我记得以前用perl-e方式直接操作文件可以做批量替换工作,但今天怎么试都不行,请教大虾们了 我的环境是WIN2000 SERVER,把test1.pl中是aaa的字符串替换为ccc. perl -pi.bak -e '~s/aaa/ccc/g' test1.pl 求教!
在看大骆驼书,里面有段是这样写的 while (/^([^:]+):\s*(.*)/gm ) { # get mail header $headers{$1} = $2; } 这个表达式是不是以非“:”开头的字符串,中间包含“:”,后面跟1或0个空白,再加1或0个字符 :em21: :em21: 然后我有点乱了, 有没有大哥可以解释的清楚一点。。。。。。 [ 本帖最后由 anwll 于 2009-6-23 11:42 编辑 ]
前几天跟Apile谈起了cgi的安全问题,并谈到了tainted模式。回去后偶查了一些关于tainted的资料,并看到一个如何判断某个变量是否tainted的函数如下: sub is_tainted{ my $var=shift; my $blank=substr($var,0,0); return not eval {eval "1 || $blank" || 1}; } 这个函数让偶郁闷了半天,于是在mailing list上发贴求教。perlmonk的Jeff很热心的回答了偶的问题,引用如下: If a variable is tainted, then any subst...
把test.txt的内容: auth required pam_nologin.so auth required pam_securetty.so auth required pam_env.so auth required pam_rhosts_auth.so account required pam_stack.so service=system-auth password sufficient pam_stack.so service=system-auth 标红的替换成: auth sufficient pam_rhosts_auth.so 我用下面命令替换,但是不行 perl -pi -e 's /auth ...