awk - 字符类正则表达式 gsub 更改输出

问题描述 投票:0回答:1

awk
解析以下内容:

$> df -h  /
Filesystem      Size  Used Avail Use% Mounted on
rootfs          476G  370G  106G  78% /

如果我对值上的 G 使用显式匹配,它会按预期工作:

$> awk -v indrive="/dev/sda1" 'NR!=1{gsub(/G/,""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1

但是,如果我将其泛化为 char 类:

awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1

不确定 370 和 78% 是从哪里来的。

更新:我实际上得到了同样的信息:

awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[a-zA-Z]/,""); print $2,$4,indrive}' <(df -h /)
370 78% /dev/sda1

但是使用

[[:upper:]]
似乎效果很好:

awk -v indrive="/dev/sda1" 'NR!=1{gsub("([[:upper:]])*",""); print $2,$4,indrive}' <(df -h /)
476 106 /dev/sda1
bash awk
1个回答
0
投票

gsub(/[[:alpha:]]/,"")
完全删除第一个字段并更改
$2
$4
所指的内容。参见:

$ awk -v indrive="/dev/sda1" 'NR!=1{gsub(/[[:alpha:]]/,""); print $0}' <(df -h /)
          476  370  106  78% /
© www.soinside.com 2019 - 2024. All rights reserved.