This message1(name:"hello";age:10;US);
This message2(name:"hii";age:12;US;sdkfjd;l);
我想在年龄之间提取词语:和;得到10.这个词的位置在每一行都有所不同。所以我不能使用$ columnnumber。 当我使用它时,它没有提供所需的输出。
awk -F'age:|;' '{print $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