用awk提取字符串

时间:2015-04-27 07:10:59

标签: awk

This message1(name:"hello";age:10;US);
This message2(name:"hii";age:12;US;sdkfjd;l);

我想在年龄之间提取词语:和;得到10.这个词的位置在每一行都有所不同。所以我不能使用$ columnnumber。 当我使用它时,它没有提供所需的输出。

awk -F'age:|;' '{print $2}'

2 个答案:

答案 0 :(得分:1)

使用 awk

awk -F".*age:|;|)" '{print $2}' File

将字段分隔符设置为1)。* age :(字符序列以age:结尾),2);和3))。然后只需打印第二个字段。

示例:

AMD$ cat File
This is a message(name:"hello";age:10;US);
This is a message(name:"hello";US;age:10);
This is a message(age:10;US;name:"hello");

AMD$ awk -F".*age:|;|)" '{print $2}' File
10
10
10

答案 1 :(得分:0)

作为awk的替代方法,如果你的grep实现支持perl regex:

grep -oP "(?<=age:)[0-9]+" File
10

或使用GNU awk:

awk 'match($0, /age:"?([0-9]+)"?/, a) { print a[1] }' File
10