在剪切命令中使用过滤器

时间:2017-02-03 15:25:39

标签: bash grep cut

对于作业的Hello我已经获得了格式化为

的文件
k2mff:x:32162:30:NJIT Amateur Radio Club:/afs/cad/u/k/2/k2mff:/usr/local/etc/klub/clubshell
senate:x:32164:30:The NJIT Student Senate:/afs/cad/u/s/e/senate:/usr/local/etc/klub/clubshell
ge:x:32184:30:Hongya Ge:/afs/cad/u/g/e/ge:/bin/tcsh
spasovic:x:32186:30:lazar spasovic fac/staff:/afs/cad/u/s/p/spasovic:/bin/csh
etc...

我使用grep命令获取粗体字段:

grep "csh" /etc/passwd | cut -d ":" -f 3,5,6

我的问题是,由于cut命令使用分隔符,因此字段6将返回

/afs/cad/u/s/p/spasovic

有没有办法我只能检索/命令中最后一个cut后面的字符,特别是第六个字段?或者我必须将输出过滤到另一个命令吗?

1 个答案:

答案 0 :(得分:0)

您可以使用bash的功能在分隔符($IFS)上分割一行以获取不同的字段,并使用${var##glob}参数展开来删除特定字段的部分。

所以你可以这样:

# read each line and split it into named variables
while IFS=: read -r name pw uid gid gecos home shell; do
    # check the part after `/' in $shell 
    if [[ "${shell##*/}" == csh ]]; then
        # print the fields you want
        echo "$uid" "$gecos" "${home##*/}"
    fi
done < /etc/passwd

您可以在此循环中添加其他if / then语句,以根据其他条件打印其他字段等。