我想知道如何提取ID(KC 000001 -3)后的所有数字,包括使用Perl正则表达式的自来水后设置的数字。
第一个ID的附加数字(0.50)、第二个ID的附加数字(0.60)和第三个ID的附加数字(0.70 0.80)始终以空格作为新行开始,并以另一次点击结束。
输入文件。
KC000001 0.30 0.40 0.50
KC000002 0.30 0.40 0.50 0.60
KC152363 0.30 0.40 0.50 0.60 0.70 0.80
我想得到这个输出文件。
0.30 0.40 0.50
0.30 0.40 0.50 0.60
0.30 0.40 0.50 0.60 0.70 0.80
我准备了这个正则表达式。
if ($linea =~ /^(.[a-z0-9]\d+.\d)\s(.?)$/){
print $line
}
然而,它给了我以下错误(它没有打印制表符后的数字(第一个0. 50),(第二个0. 60),和(第三个0. 70 0. 80))
0.30 0.40
0.30 0.40 0.50
0.30 0.40 0.50 0.60
我想知道这个正则表达式有什么问题。有没有可能只用一个正则表达式来创建它?
输入文件。
KC000001 0.30 0.40 0.50
KC000002 0.30 0.40 0.50 0.60
KC152363 0.30 0.40 0.50 0.60 0.70 0.80
输出文件
0.30 0.40
0.30 0.40 0.50
0.30 0.40 0.50 0.60
3条答案
按热度按时间gwo2fgha1#
使用Perl一行程序:
这是一个 array slice 操作,只保留 column-2-till-the-end。
y1aodyip2#
这将删除每行的第一个选项卡之前的所有内容(包括第一个选项卡):
作为一行程序:
参见Specifying file to process to Perl one-liner。
mnemlml83#
使用这个Perl一行程序:
或就地更改文件:
Perl一行程序使用以下命令行标志:
-e
:告诉Perl在行内查找代码,而不是在文件中。-p
:一次循环一行输入,默认情况下将其分配给$_
。每次循环迭代后添加print $_
。-i.bak
:就地编辑输入文件(覆盖输入文件)。在覆盖之前,通过在其名称后面附加扩展名.bak
来保存原始文件的备份副本。如果您想跳过写入备份文件,只需使用-i
并跳过扩展名。参见:
perldoc perlrun
:如何执行Perl解释器:命令行开关perldoc perlre
: Perl regular expressions (regexes)perldoc perlrequick
: Perl regular expressions quick start