我有一个包含大量的这些我在这个Perl单行程中做错了什么?
"/watch?v=VhsnHIUMQGM"
一个文件,我想使用输出一个perl的一行字母代码。所以我尝试
perl -nle 'm/\"\/watch\?v=(.*?)\"/g' filename.txt
但它不打印任何东西。
我在做什么错?
我有一个包含大量的这些我在这个Perl单行程中做错了什么?
"/watch?v=VhsnHIUMQGM"
一个文件,我想使用输出一个perl的一行字母代码。所以我尝试
perl -nle 'm/\"\/watch\?v=(.*?)\"/g' filename.txt
但它不打印任何东西。
我在做什么错?
-n
选项处理每行但不打印任何东西。因此,如果您成功匹配,则需要添加明确的print
。
perl -ne 'while (m/\"\/watch\?v=(.+?)\"/g) { print "$1\n" }' filename.txt
另一种方法,如果你确定每一行会匹配,是使用-p
选项,处理后打印出的$_
的值,例如:
perl -pe 's/\"\/watch\?v=(.+?)\"/$1//' filename.txt
您可以分割字符串在"="
而不是匹配:
perl -paF= -e '$_= @F[1]' filename.txt
你的正则表达式很好。您没有输出,因为-n
选项不会打印任何内容。它只是围绕程序包装一个while (<>) { ... }
循环(运行perl --help
以获取有关Perl选项的简要说明)。
以下使用您的正则表达式,但添加一些打印。在列表上下文中,带有/g
选项的正则表达式返回所有捕获。实际上,我们打印每个捕获。
perl -nle 'print for m/\"\/watch\?v=(.*?)\"/g' data.dat
是否值得添加'\ N',使得捕获分离? – 2010-08-29 06:36:13
@PP'-l'选项可以处理这个问题。 – FMc 2010-08-29 15:04:58
见['的perldoc perlrun'](http://perldoc.perl.org/perlrun.html) – 2011-03-28 14:26:27