Я не уверен, ищите ли вы способ командной строки сделать это или нет, и следующий код предполагает, что вывод passwd -S равен точно так, как вы его указали ( что, вероятно, не будет работать на практике), но это один из подходов:
cat /etc/passwd | perl -ne '$user = (split /:/)[0]; print "$user\n" if `passwd -S $user` ne "Password: locked"'
На практике вам, вероятно, понадобится какое-то волосатое регулярное выражение в конце, например:
`passwd -S $user` !~ /^\s*Password\s*:\s*locked\s*$/im'
Где 'i' в конце делает его нечувствительным к регистру (что, вероятно, не обязательно), а 'm' позволяет сопоставить несколько строк вывода [из passwd -S]. Трудно сказать точно, что вам нужно, не видя точного результата, который вы соответствуете (на вашем * nix).
Например, на Cygwin, я думаю, что эквивалент будет следующим:
`passwd -S $user` !~ /^\s*Account\s+disabled\s+:\s+yes\s*$/im'