使用 sed 排除字母/数字模式

使用 sed 排除字母/数字模式

我正在制作一份通用 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

请注意这!再次意味着不是

相关内容