我正在使用 dscacheutil 命令验证某些用户的 UID/GID。将 grep 与 -A 标志一起使用可以满足我的需要,但行数没有意义。输出如下:
Edit8:~ edit08$ dscacheutil -q user | grep -A 6 "userX"
name: userX
password: ********
uid: 2063
gid: 1021
dir: /Users/userX
shell: /bin/sh
gecos: User X
name: userA
password: ********
uid: 2013
Edit8:~ edit08$ dscacheutil -q user | grep -A 4 "userX"
name: userX
password: ********
uid: 2063
gid: 1021
dir: /Users/userX
shell: /bin/sh
gecos: User X
name: userA
Edit8:~ edit08$ dscacheutil -q user | grep -A 2 "userX"
name: userX
password: ********
uid: 2063
--
dir: /Users/userX
shell: /bin/sh
gecos: User X
Edit8:~ edit08$ dscacheutil -q user | grep -6 "userX"
uid: 2012
gid: 1010
dir: /Users/userB
shell: /bin/sh
gecos: User B
name: userX
password: ********
uid: 2063
gid: 1021
dir: /Users/userX
shell: /bin/sh
gecos: User X
name: userA
password: ********
uid: 2013
Edit8:~ edit08$ dscacheutil -q user | grep -A 2 "userX"
name: userX
password: ********
uid: 2063
--
dir: /Users/userX
shell: /bin/sh
gecos: User X
Edit8:~ edit08$ dscacheutil -q user | grep -A 3 "userX"
name: userX
password: ********
uid: 2063
gid: 1021
dir: /Users/userX
shell: /bin/sh
gecos: User X
Edit8:~ edit08$
虽然我的逻辑规定行数必须是 6,但实际上是 3。
有人吗?
谢谢
答案1
我标记了与~~~
模式匹配的行,并对其后的行进行了编号:
Edit8:~ edit08$ dscacheutil -q user | grep -A 6 "userX"
~~~ name: userX
1 password: ********
2 uid: 2063
3 gid: 1021
~~~ dir: /Users/userX
1 shell: /bin/sh
2 gecos: User X
3
4 name: userA
5 password: ********
6 uid: 2013
Edit8:~ edit08$ dscacheutil -q user | grep -A 3 "userX"
~~~ name: userX
1 password: ********
2 uid: 2063
3 gid: 1021
~~~ dir: /Users/userX
1 shell: /bin/sh
2 gecos: User X
3
正如您所看到的,永远不会向您显示比相关匹配之后grep -A n
更多的行;n
只是有些匹配项靠近,导致包含的行很长。
答案2
从手册页:
-A NUM,--after-context=NUM
在匹配行之后打印 NUM 行尾随上下文。在连续的匹配组之间放置一条包含组分隔符 (--) 的行。使用 -o 或 --only-matching 选项,这不起作用并给出警告。
在您给出的所有示例中,每个实例后面userX
都跟着正确的上下文行数。如果另一个实例userX
出现在另一个实例的上下文中,则上下文会扩展到第二个实例之后的任意行。