Shell AWK使用空格和正斜杠或逗号作为分隔符

Shell AWK使用空格和正斜杠或逗号作为分隔符,shell,awk,Shell,Awk,我希望awk有两个分离器,我知道我可以这样通过 awk-F“=|/”{print$1}' 不过,我正在尝试传递2个字段分隔符,即空格(默认fs)和正斜杠。我想从下面的字符串中提取ip地址 inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0 目前,我在pipe中使用2 awk语句,我相信有更好的方法来实现这一点 awk '{print $2}' | awk -F"/" '{print $1}' 让我们从这

我希望awk有两个分离器,我知道我可以这样通过

awk-F“=|/”{print$1}'

不过,我正在尝试传递2个字段分隔符,即空格(默认fs)和正斜杠。我想从下面的字符串中提取ip地址

inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0
目前,我在pipe中使用2 awk语句,我相信有更好的方法来实现这一点

awk '{print $2}' | awk -F"/" '{print $1}'

让我们从这个测试文件开始:

$ cat file
inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0

如果希望空格和斜杠作为字段分隔符,请尝试:

$ awk -F' |/' '{print $2}' file
10.190.120.13
$ awk -F'[[:blank:]/,]' '{print $2}' file
10.190.120.13
如果您的输入可能有制表符和空格,请尝试:

$ awk -F'[[:blank:]]|/' '{print $2}' file
10.190.120.13
在正则表达式中,
|
表示或。因此,
|/
(垂直条前有空格)表示空格或斜杠。Awk支持POSIX正则表达式,在POSIX下,
[:blank:][]
将匹配任何选项卡或空格

或者,我们可以将这两个选项放在方括号内,如:

$ awk -F'[[:blank:]/]' '{print $2}' file
10.190.120.13
根据标题,如果希望使用空格、斜杠或逗号作为分隔符,请尝试:

$ awk -F' |/' '{print $2}' file
10.190.120.13
$ awk -F'[[:blank:]/,]' '{print $2}' file
10.190.120.13

如果您希望空格和斜杠作为字段分隔符,您是否尝试过
awk-F'|/'{print$2}'
或者,如果可能有制表符,
awk-F'[[:blank:][]|/'{print$2}“
?@John1024我认为这是一个值得回答的问题。谢谢你的回答,我正在用
ipa
命令使用这个方法,我也尝试过这种方法,但没有公布ip在第6列,我用这个-
ipa | grep eth0$| awk-F'[[:blank:]./“{print$6}”
@opensourcejunkie非常好。如果您愿意,为了提高效率,可以取消额外的
grep
过程:
ipa | awk-F'[[:blank:]./'/eno1$/{print$6}'
John1024-感谢您的解释,这非常有用。@opensourcejunkie很高兴它有帮助。