Shell AWK使用空格和正斜杠或逗号作为分隔符
我希望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-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很高兴它有帮助。