我有一个包含很多这些的文件
"/watch?v=VhsnHIUMQGM"
Run Code Online (Sandbox Code Playgroud)
我想用perl one-liner输出字母代码.所以我试试
perl -nle 'm/\"\/watch\?v=(.*?)\"/g' filename.txt
Run Code Online (Sandbox Code Playgroud)
但它不会打印任何东西.
我究竟做错了什么?
PP.*_*PP. 13
该-n
选项处理每一行但不打印任何内容.因此,print
如果成功匹配,则需要添加显式内容.
perl -ne 'while ( m/\"\/watch\?v=(.+?)\"/g ) { print "$1\n" }' filename.txt
Run Code Online (Sandbox Code Playgroud)
另一种方法,如果你确定每一行都匹配,就是使用-p
打印出$_
后处理值的选项,例如:
perl -pe 's/\"\/watch\?v=(.+?)\"/$1//' filename.txt
Run Code Online (Sandbox Code Playgroud)
你的正则表达没问题.您没有输出,因为该-n
选项不会打印任何内容.它只是while (<>) { ... }
在程序周围包装一个循环(运行perl --help
以简要解释Perl选项).
以下使用您的正则表达式,但添加一些打印.在列表上下文中,带有该/g
选项的正则表达式返回所有捕获.实际上,我们打印每个捕获.
perl -nle 'print for m/\"\/watch\?v=(.*?)\"/g' data.dat
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
423 次 |
最近记录: |