如何告诉 sed 仅对输出的第一列进行更改

How to tell sed to make changes only to 1st column of an output

所以我有一个包含 6 列的输出,我想做的只是第一列删除最后一个分号“/”之前的所有内容。 到目前为止我所拥有的是

df -k | awk '{print }' | sed 's@.*/@@'

但我不想在那里使用 awk 以便像这样只获取第一列,我想找到一种方法让 sed 仅对第一列进行这些更改。

所以原来的输出是这样的:

Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0d0s0      12324895 5082804 7118843    42%    /
/devices                   0       0       0     0%    /devices
ctfs                       0       0       0     0%    /system/contract
proc                       0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
swap                 8998420    1052 8997368     1%    /etc/svc/volatile
objfs                      0       0       0     0%    /system/object
sharefs                    0       0       0     0%    /etc/dfs/sharetab
/usr/lib/libc/libc_hwcap1.so.1 12324895 5082804 7118843    42%    /lib/libc.so.1
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0d0s3      4136995  146364 3949262     4%    /var
swap                 9145604  148236 8997368     2%    /tmp
swap                 8997400      32 8997368     1%    /var/run

我希望第一列看起来像这样:

Filesystem
c0d0s0
devices
ctfs
proc
mnttab
swap
objfs
sharefs
libc_hwcap1.so.1
fd
c0d0s3
swap
swap

只需拆分 / 切片中的第一个字段,并在第一个字段作为行的第一部分出现时将第一个字段替换为这些切片中的最后一个:

awk '{n=split(,a,"/"); gsub("^",a[n])}1' file

测试

$ awk '{n=split(,a,"/"); gsub("^",a[n])}1' file
Filesystem            kbytes    used   avail capacity  Mounted on
c0d0s0      12324895 5082804 7118843    42%    /
devices                   0       0       0     0%    /devices
ctfs                       0       0       0     0%    /system/contract
proc                       0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
swap                 8998420    1052 8997368     1%    /etc/svc/volatile
objfs                      0       0       0     0%    /system/object
sharefs                    0       0       0     0%    /etc/dfs/sharetab
libc_hwcap1.so.1 12324895 5082804 7118843    42%    /lib/libc.so.1
fd                         0       0       0     0%    /dev/fd
c0d0s3      4136995  146364 3949262     4%    /var
swap                 9145604  148236 8997368     2%    /tmp
swap                 8997400      32 8997368     1%    /var/run

注意 awk '{n=split(,a,"/"); =a[n]}1' 也可以,只是格式会丢失,因为当您修改其中一个字段时会重新计算完整的字符串。

df -k | awk '{print }' | perl -pe 's/^[\S]*\///g'

df -k | awk '{print }' |perl -lane '$F[0]=~s/.*\///g;print "@F"'
df -k|awk -F' ' '{print }'|sed "s/.*\///g"
$ awk '{sub(/.*\//,"",)}1' file
Filesystem            kbytes    used   avail capacity  Mounted on
c0d0s0 12324895 5082804 7118843 42% /
devices 0 0 0 0% /devices
ctfs                       0       0       0     0%    /system/contract
proc                       0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
swap                 8998420    1052 8997368     1%    /etc/svc/volatile
objfs                      0       0       0     0%    /system/object
sharefs                    0       0       0     0%    /etc/dfs/sharetab
libc_hwcap1.so.1 12324895 5082804 7118843 42% /lib/libc.so.1
fd                         0       0       0     0%    /dev/fd
c0d0s3 4136995 146364 3949262 4% /var
swap                 9145604  148236 8997368     2%    /tmp
swap                 8997400      32 8997368     1%    /var/run

.

$ awk 'NR==1{sub(/Mounted on/,"Mounted_on")} {sub(/.*\//,"",)}1' file | column -t
Filesystem        kbytes    used     avail    capacity  Mounted_on
c0d0s0            12324895  5082804  7118843  42%       /
devices           0         0        0        0%        /devices
ctfs              0         0        0        0%        /system/contract
proc              0         0        0        0%        /proc
mnttab            0         0        0        0%        /etc/mnttab
swap              8998420   1052     8997368  1%        /etc/svc/volatile
objfs             0         0        0        0%        /system/object
sharefs           0         0        0        0%        /etc/dfs/sharetab
libc_hwcap1.so.1  12324895  5082804  7118843  42%       /lib/libc.so.1
fd                0         0        0        0%        /dev/fd
c0d0s3            4136995   146364   3949262  4%        /var
swap              9145604   148236   8997368  2%        /tmp
swap              8997400   32       8997368  1%        /var/run

sed解决方案

$ sed -r 's~.*/(\S+) ~~' file

$ sed -r 's~.*/(\S+)\s~~' file