我有输入文本文件,例如,myfile.txt
其中包含类似的数据
WO_ID
------------------------------------------------------------------------
moveover_virus_8493020020_virus.final
moveover_virus_7483920322_virus.csvwork
等等,只有电话号码正在改变我有大约 13 个这样的工作订单,我只需要输入号码作为输入,因为我需要一个 perl 脚本。我需要创建该脚本,我正在尝试 grep 但我无法仅获取数字。
答案1
查看您的输入文件,您可以使用以下命令执行类似的操作awk
:
awk -F"_" '{print $3}' inputfile | uniq > outputfile
或使用grep
,
grep -o -E '[0-9]+' inputfile | uniq > outputfile
使用sed
,
sed 's/[^0-9]*//g;/^\s*$/d' inputfile | uniq
答案2
不需要uniq
awk -F"_" 'NF>2 {if ( !a[$3]++) print $3}' inputfile
在哪里
NF>2
确保有电话号码!a[$3]++
会评价1
第一次,0
其他时间
答案3
您可以根据您的需要使用此 perl 脚本:
#!/bin/perl
my $str = "moveover_virus_7483920322_virus.csvwork";
my $phone = (split /_/, $str)[2];
print "$phone\n";
测试脚本:
[iahmad@ijaz-cms ~]$ ./perltest
7483920322
答案4
我喜欢环顾四周做这种工作。我将示例数据复制到名为“test”的文本文件中,然后运行以下命令
$ grep -oP '(?<=s\_).*(?=\_v)' test
8493020020
7483920322
grep -o 表示仅返回匹配项
-P 表示使用 Perl 正则表达式
?<= 表示“匹配 s_ 之后的任何内容”(请注意,“_”需要用“\”进行转义)
?= 表示“匹配 v_ 之前的任何内容”(再次注意“_”需要转义)
所以最终结果是“s_”(virus_)和“-v”(_virus)之间的任何内容的匹配