我有一个字符串
string1 = SIZE 15 by 1 ;
和
string2 = SIZE 3 by 56 ;
我正在perl和awk中逐行读取这些字符串 我希望在一个变量和一个变量中得到字符串中的数字,如15 像一个变量中的智者3和一个变量中的56个。
我用$ frag1 = substr(line,9,2); $ frag2 = substr(line,15,1);在awk中,第一个字符串工作正常但第二个字符串失败,因为第二个字符串中的第一个数字只有一个数字。
任何想法,我可以使用的任何正则表达式。感谢
答案 0 :(得分:2)
如果您的文件包含“string1 = SIZE 15 by 1;”形式的行,则可以使用命令awk '{print $4, $6}'
。如果您的行是“SIZE 15 by 1”,则可以运行awk '{print $2, $4}'
。不需要正则表达式
答案 1 :(得分:0)
正则表达式(\d+)
应该可以解决问题。您可以将已保存的变量与$1
一起使用。
当你的字符串$ str被定义为你用
所说的那样 my $str = "string1 = SIZE 15 by 1 ;";
正则表达式可能看起来像
/string \d \s = \s SIZE \s (\d+) \s by \s (\d+) \s ;/x
其中变量15
和1
保存为$1
和$2
。
答案 2 :(得分:0)
如果你正在使用Gawk,你可以利用扩展的match()函数:
if (match($0, /string[0-9]+ = SIZE ([0-9]+) by ([0-9]+)/, a)) {
print $0 " matches with values " a[1] " and " a[2] "."
}
答案 3 :(得分:0)
my ($first, $second) = $string1 =~ /\b(\d+)\b/g;
\b
匹配word boundary
,因此string1
或1string
等字符串中的数字将不匹配。