grep命令中的^字符在^d中代表什么意思?

10
当我运行命令 ls -l | grep ^d 时,它只会列出当前目录中的目录。

我想知道符号 ^ 在 ^d 中代表什么意思?

1
它匹配字符串的开头。 - user529758
1
字面上意思是“以...开始”,因此^d表示“以d开头”。 - Burhan Khalid
可能是重复问题:https://unix.stackexchange.com/questions/3077/what-does-d-mean-in-ls-l-grep-d - Channa
3个回答

15

^$ 是元字符,分别匹配行的开头和结尾。grep 只匹配以 "d" 开头的行。


谢谢您的解释,但是提到的链接已经失效了,您能给我另一个链接吗? - Indrajeet Gour
@Avenger 感谢您指出损坏的链接,我会找到一个合适的并进行发布。 - AllTooSir

5
为了补充 The New Idiot的好回答,我想指出以下内容:
ls -l | grep ^d

显示当前目录中的所有目录。这是因为ls -l在目录信息的开头添加了一个d

ls -l的格式如下:

-rwxr-xr-x  1 user group    0 Jun 12 12:25 exec_file
-rw-rw-r--  1 user group    0 Jun 12 12:25 normal_file
drwxr-xr-x 16 user group 4096 May 24 12:46 dir
^
|___ see the "d"

为了更加清晰,您可以使用ls -lF,在目录信息的末尾包含/
-rwxr-xr-x  1 user group    0 Jun 12 12:25 exec_file*
-rw-rw-r--  1 user group    0 Jun 12 12:25 normal_file
drwxr-xr-x 16 user group 4096 May 24 12:46 dir/

所以 ls -lF | grep /$ 的作用与 ls -l | grep ^d 相同。

1
它有两个意思。一个是像上面所说的“新白痴”。另一个同样有用的是在字符类表达式中,表示否定: grep -E '[^[:digit:]]' 接受除数字以外的任何字符。'^'必须是[]内的第一个字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接