首页 > 解决方案 > 仅更改 bash 中字符之间出现的单个空格

问题描述

我的输出如下:

NAME                UUID                                  TYPE            DEVICE 
Wired connection 1  e4249ef0-c4f0-3b64-8950-0c6be3edaca5  802-3-ethernet  enp0s3 

wireless如果其中提到了类型,我想选择设备名称,使用awk.

Expected output:
enp0s3

然而,一个问题。NAME有时可以是一个单词,在这种情况下可以awkTYPEand识别DEVICEfield 3 & 4

awk '$3 ~ /wireless/{ print $4 }'

但是 TheNAME有时spaces介于两者之间,我想在应用之前先处理awk它,否则它的行为不正常。如果我可以将单个空格更改为“-”,它就解决了我的目的。

请提出建议。

标签: shellawksed

解决方案


您说要打印“设备名称”,所以我们不知道您是要打印“设备”字段还是“名称”字段,所以我们都只是猜测。这就是为什么在任何问题中都包含预期输出很重要的原因。

要打印设备字段:

awk '$(NF-1) ~ /wireless/ { print $NF }' file

要打印 NAME 字段:

awk '$(NF-1) ~ /wireless/ { sub(/([[:space:]]+[^[:space:]]+){3}[[:space:]]*$/,""); print }' file

无论您的文件在字段之间包含什么空格,只要只有 NAME 字段本身可以包含空格,它就可以工作。


推荐阅读