在字符串中查找数字

时间:2013-08-14 06:16:46

标签: linux perl awk

我有一个字符串

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中,第一个字符串工作正常但第二个字符串失败,因为第二个字符串中的第一个数字只有一个数字。

任何想法,我可以使用的任何正则表达式。感谢

4 个答案:

答案 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

其中变量151保存为$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,因此string11string等字符串中的数字将不匹配。