只是为了练习,我想知道 ls 命令有多少个选项。我写了下面的代码
man ls | grep -o -i '\-[a-z0-9]$'
为什么这段代码只打印出来-C and -V
?
答案1
解析一下ls --help
,看起来比较容易。grep
与 PCRE ( ) 一起使用-P
,不包括长选项,例如--all
:
ls --help | grep -Po '^\s+\K-[^,\s](?=,|\s)'
解析man ls
会给出相同的结果:
man ls | grep -Po '^\s+\K-[^,\s](?=,|\s)'
例子:
解析ls --help
:
% ls --help | grep -Po '^\s+\K-[^,\s](?=,|\s)'
-a
-A
-b
-B
-c
-C
-d
-D
-f
-F
-g
-G
-h
-H
-i
-I
-k
-l
-L
-m
-n
-N
-o
-p
-q
-Q
-r
-R
-s
-S
-t
-T
-u
-U
-v
-w
-x
-X
-Z
-1
解析man ls
:
% man ls | grep -Po '^\s+\K-[^,\s](?=,|\s)'
-a
-A
-b
-B
-c
-C
-d
-D
-f
-F
-g
-G
-h
-H
-i
-I
-k
-l
-L
-m
-n
-N
-o
-p
-q
-Q
-r
-R
-s
-S
-t
-T
-u
-U
-v
-w
-x
-X
-Z
-1
答案2
因为并非所有选项都是手册页中一行中的最后一项,实际上很少有选项是最后一项。
例如,大多数选项行将类似于:-a, --all
我不是 100% 确定它是否能得到所有这些,但试试这个:
$ man ls | grep -E -o -i -- ' {7}-[a-z0-9], --[A-Z]+| {7}-[A-Z0-9] | {7}--[A-Z0-9]+' |
sed -e 's/^ *//'
-a, --all
-A, --almost
--author
-b, --escape
--block
-B, --ignore
-c
-C
--color
-d, --directory
-D, --dired
-f
-F, --classify
--file
--format
--full
-g
--group
--sort
-G, --no
-h, --human
--si
-H, --dereference
--dereference
--hide
--indicator
-i, --inode
-I, --ignore
-k, --kibibytes
-l
-L, --dereference
-m
-n, --numeric
-N, --literal
-o
-p, --indicator
-q, --hide
--show
-Q, --quote
--quoting
-r, --reverse
-R, --recursive
-s, --size
-S
--sort
--time
--time
-t
-T, --tabsize
-u
-U
-v
-w, --width
-x
-X
-Z, --context
-1
--help
--version
这将同时获得短期和长期选择。
上述内容适用于 GNU ls
。它可能适用于也可能不适用于其他版本ls