2013-08-14 4 views
-1

문자열에 숫자를 찾기내가 문자열을 가지고

string1 = SIZE 15 by 1 ; 

string2 = SIZE 3 by 56 ; 

내가 펄 라인으로 파일 라인에서 이러한 문자열을 읽고 을 awk가하고 난에 숫자를 얻으려면 하나의 변수에 15를, 하나의 변수에 1을 더한 문자열 은 하나의 변수에 3을, 하나의 변수에 56을 현명하게 둡니다.

나는 $ frag1 = substr (line, 9,2); $ frag2 = substr (line, 15,1); 두 번째 문자열의 첫 번째 숫자는 하나의 숫자 만 있기 때문에 첫 번째 문자열에는 잘 작동하지만 두 번째 문자열에는 실패하는 awk에서.

모든 아이디어, 내가 사용할 수있는 정규식. 감사합니다

답변

0
my ($first, $second) = $string1 =~ /\b(\d+)\b/g; 

\b 일치 word boundary 그래서 번호와 일치하지 않습니다 string1 또는 1string 같은 문자열에.

+0

고마워요. 그것은 perl의 매력처럼 작동했습니다. 하지만 awk에서도이 작업을 수행해야합니다. 도와 주실 수 있습니까? – rozar

+0

awk 'BEGIN {while (getline line < "foobar.lef"> 0) {if (match (line, "SIZE")) {print line}} 이것은 지금까지 가지고있는 것입니다. – rozar

+0

@rozar는 awk에 관해 당신을 도울 수 없다 –

2

파일에 "string1 = SIZE 15 by 1;"형식의 줄이있는 경우 awk '{print $4, $6}' 명령을 사용할 수 있습니다. 라인이 "SIZE 15 by 1"이면 awk '{print $2, $4}'을 실행할 수 있습니다. 정규 표현식이 필요하지 않습니다.

0

정규식 (\d+)이 트릭을 수행해야합니다. 저장된 변수는 $1과 함께 사용할 수 있습니다.

그리고 당신의 문자열 $ str을이처럼 정의 경우는 정규식

/string \d \s = \s SIZE \s (\d+) \s by \s (\d+) \s ;/x

변수 151$1로 저장됩니다

과 같이 할 수

my $str = "string1 = SIZE 15 by 1 ;";

말했다 $2. 당신이 둔한를 사용하는 경우

0

당신은 확장 일치() 함수를 이용할 수 있습니다 :

if (match($0, /string[0-9]+ = SIZE ([0-9]+) by ([0-9]+)/, a)) { 
    print $0 " matches with values " a[1] " and " a[2] "." 
} 
관련 문제