我正在制作一份通用 ID 报告,我当前使用的获取帐户的命令会egrep
获取我需要的大部分帐户,但显然不是任何以数字结尾的帐户,而我们的一些 Gen ID 会这样做:
cat /etc/passwd | cut -d: -f1 | egrep '^[a-z]|^[A-Z]' | egrep '[a-z]$|[A-Z]$'
幸运的是,我们的用户帐户都遵循相同的模式 - 一个字母,后跟 6 个数字。我怎样才能sed
打印所有帐户/etc/passwd
除了那些以字母开头后跟 6 个数字的?
答案1
grep -vE '^[[:alpha:]][[:digit:]]{6}:' /etc/passwd
/etc/passwd
将打印除以字母字符开头后跟 6 位数字(后跟)之外的所有行:
。
关键在于-v
告诉grep
打印行的选项不是匹配模式。
如果您只想要用户名:
cut -d : -f 1 < /etc/passwd | grep -vEx '[[:alpha:]][[:digit:]]{6}'
或者与sed
:
sed -n '/^[[:alpha:]][[:digit:]]\{6\}:/!s/:.*//p' /etc/passwd
请注意这!
再次意味着不是。