【发布时间】:2023-05-07 06:46:01
【问题描述】:
当我执行ls -l | grep ^d 时,它只列出当前目录中的目录。
我想知道^d中的字符^是什么意思?
【问题讨论】:
-
匹配字符串的开头。
-
字面意思是“以”开头,所以
^d就是“以d开头”
标签: unix command-line grep
当我执行ls -l | grep ^d 时,它只列出当前目录中的目录。
我想知道^d中的字符^是什么意思?
【问题讨论】:
^d就是“以d开头”
标签: unix command-line grep
插入符号^ 和美元符号$ 是元字符,分别匹配行首和行尾的空字符串。grep 仅匹配以“d”开头的行。
【讨论】:
为了补充the good answer by 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 相同。
【讨论】:
它有两个含义。上面的“新白痴”指出。另一个同样有用的是在字符类表达式中,它表示否定:grep -E '[^[:digit:]]' accepts any character except a digit. The^` 必须是 [] 中的第一个字符。
【讨论】: