对于作业的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
后面的字符,特别是第六个字段?或者我必须将输出过滤到另一个命令吗?
答案 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语句,以根据其他条件打印其他字段等。