我有一个文件,其中包含很多这样的内容
"/watch?v=VhsnHIUMQGM"
我希望使用Perl一行代码来输出字母代码。所以我尝试:
perl -nle 'm/\"\/watch\?v=(.*?)\"/g' filename.txt
但它并没有打印任何东西。
我做错了什么?
我有一个文件,其中包含很多这样的内容
"/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
-n
选项不会打印任何东西。它只是在你的程序周围包装一个 while (<>) { ... }
循环(运行 perl --help
来获取有关 Perl 选项的简要说明)。/g
选项的正则表达式返回所有捕获结果。实际上,我们打印出每个捕获结果。perl -nle 'print for m/\"\/watch\?v=(.*?)\"/g' data.dat
\n
来分隔捕获吗? - PP.-l
选项可以处理这个。 - FMc"="
进行分割而不是匹配:perl -paF= -e '$_= @F[1]' filename.txt
perldoc perlrun
。 - Brad Gilbert