我有两种不同类型的日志行,字段$5
是:
ffe5a6fb-2933-4c01-855d-3033933600bf
3
如何使用awk
编写正则表达式,以便仅提取包含一个字符的字段?
这是我的解决方案,但它不起作用,它将返回所有内容!
awk '/[0-9]\+/ {print $5}'
我会感激您的帮助吗?
答案 0 :(得分:2)
执行:
awk '$5~/^.$/ {print $5}' file.txt
仅匹配一个数字:
awk '$5~/^[0-9]$/ {print $5}' file.txt
示例:强>
$ cat file.txt
abcdX1yad45das ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf 3 foo
abcdX1yad45das ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf ffe5a6fb-2933-4c01-855d-3033933600bf 3 foo
abcdX2fad45das
abcdX3had45das
abcdX4wad45das
abcdX5mad45das
$ awk '$5~/^.$/ {print $5}' file.txt
3
答案 1 :(得分:1)
写作的时间稍长,但如果你只关心字段的长度,我认为使用./contrib/download_prerequisites
会更清楚:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
compile 'com.android.support:support-v4:23.3.0'
}
否则,如果您想匹配length
到awk 'length($5) == 1 { print $5 }' file
范围内的单个字符,那就是:
0
...或匹配您所在地区的任何数字:
9
某些版本的awk(例如GNU awk)理解速记awk '$5 ~ /^[0-9]$/ { print $5 }' file
而不是awk '$5 ~ /^[[:digit:]]$/ { print $5 }' file
。
答案 2 :(得分:0)
不要逃避“+”号。
awk '/[0-9]+/ {print $5}'