AWK命令帮助

AWK命令帮助,awk,Awk,我如何编写一个awk命令来读取/etc/passwd文件,并只打印出使用/bin/bash程序作为默认命令shell的任何用户的姓名?awk-F:'/\/bin\/bash$/{print$1}'/etc/passwd,因为这是家庭作业,我不会为您编写程序(希望其他人也不会这么做),但以下是您需要知道的: cat /etc/passwd | awk -F ":" '$7=="/bin/bash" { print $1 }' AWK中的默认字段分隔符为空白;/etc/passwd中的字段分隔符

我如何编写一个awk命令来读取/etc/passwd文件,并只打印出使用/bin/bash程序作为默认命令shell的任何用户的姓名?

awk-F:'/\/bin\/bash$/{print$1}'/etc/passwd
,因为这是家庭作业,我不会为您编写程序(希望其他人也不会这么做),但以下是您需要知道的:

cat /etc/passwd | awk -F ":" '$7=="/bin/bash" { print $1 }'
  • AWK中的默认字段分隔符为空白;
    /etc/passwd
    中的字段分隔符是冒号。您可以通过命令行中的
    FS
    变量或
    -F
    更改AWK中的字段分隔符

  • /etc/passwd/
    中,shell列在第7个字段中

在我写这么多的时候,有两个人帮你做了家庭作业。祝你好运

@OP,您可以使用awk

awk 'BEGIN{FS=":"}$7~/bash/{print $1}' /etc/passwd
上面检查bash,但不限于/bin/bash。如果您确实需要/bin/bash,请更改它

或者告诉你的老师你只想用贝壳

#!/bin/bash

while IFS=":" read -r user b c d e f sh h
do
    case "$sh" in
        *bash* ) echo $user;;
    esac
done <"/etc/passwd"
#/bin/bash
而IFS=“:”读取-r用户b c d e f sh h
做
中的“$sh”格
*bash*)echo$user;;
以撒

完成+1但对cat的无用使用!:-)
awk-F:“$7==”/bin/bash“{print$1}”/etc/passwd
So/bin/bash与/tmp/attack/bin/bash相同?很好。和Bear一样,检查整个字段是一种更好的方法。既然您已将分隔符设置为“:”,为什么要检查整行的bash?使用$7@ghostdog74:这正是我在回复罗杰时所指的。我没有编辑我的答案以便与评论保持一致。