SOURCE

var list = [
    {
        "cmd": "cat",
        "format": "cat [-AbeEnstTuv] fileName",
        "params": [
            "-n 由1开始对所有输出的行数编号。",
            "-b 和-n相似,只不过对于空白行不编号。",
            "-s 当遇到有连续两行以上的空白行,就代换为一行的空白行。",
            "-v 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。",
            "-E 在每行结束处显示 $。",
            "-T 将 TAB 字符显示为 ^I。",
            "-A 等价于 -vET。",
            "-e 等价于\"-vE\"选项;",
            "-t 等价于\"-vT\"选项;"
        ],
        "desc": "用于连接文件并打印到标准输出设备上",
        "example": ""
    },
    {
        "cmd": "cd",
        "format": "cd [dirName]",
        "params": [
            "~ 表示为 home 目录 的意思",
            ". 则是表示目前所在的目录",
            ".. 则表示目前目录位置的上一层目录"
        ],
        "desc": "用于切换当前工作目录",
        "example": ""
    },
    {
        "cmd": "chmod",
        "format": "chmod [-cfvR] file...",
        "params": [
            "-c 若该文件权限确实已经更改,才显示其更改动作",
            "-f 若该文件权限无法被更改也不要显示错误讯息",
            "-v 显示权限变更的详细资料",
            "-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)"
        ],
        "desc": "控制用户对文件的权限的命令。",
        "example": ""
    },
    {
        "cmd": "cp",
        "format": "cp [options] source [dest|directory]",
        "params": [
            "-f 覆盖已经存在的目标文件而不给出提示",
            "-p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。",
            "-i 与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖。",
            "-r 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。"
        ],
        "desc": "主要用于复制文件或目录",
        "example": ""
    },
    {
        "cmd": "find",
        "format": "find path -option [-print] [ -exec -ok command] {} ;",
        "params": [
            "-time 在过去多少毫秒内被修改过的文件",
            "-e 空的文件",
            "-p 路径名称符合 p 的文件",
            "-name 文件名称符合 name 的文件(即以递归的方式逐个变更)",
            "-size 文件大小是n单位",
            "-p 权限查询",
            "-g 查询用户文件"
        ],
        "desc": "用来在指定目录下查找文件",
        "example": ""
    },
    {
        "cmd": "grep",
        "format": "grep [-bcdFGHilLnov][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>] [范本样式][文件或目录...]",
        "params": [
            "-A <显示行数>,除了显示符合范本样式的那一列之外,并显示该行之后的内容。",
            "-b 在显示符合样式的那一行之前,标示出该行第一个字符的编号。",
            "-B <显示行数>,除了显示符合样式的那一行之外,并显示该行之前的内容。",
            "-R 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)",
            "-c 计算符合样式的列数。",
            "-C <显示行数>,除了显示符合样式的那一行之外,并显示该行之前后的内容。",
            "-d <动作>,当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。",
            "-F 将样式视为固定字符串的列表。",
            "-G 将样式视为普通的表示法来使用。",
            "-H 在显示符合样式的那一行之前,表示该行所属的文件名称。",
            "-i 忽略字符大小写的差别。",
            "-l 列出文件内容符合指定的样式的文件名称。",
            "-L 列出文件内容不符合指定的样式的文件名称。",
            "-n 在显示符合样式的那一行之前,标示出该行的列数编号。",
            "-o 只显示匹配PATTERN 部分。",
            "-v 显示不包含匹配文本的所有行。"
        ],
        "desc": "用于查找文件里符合条件的字符串",
        "example": ""
    },
    {
        "cmd": "ls",
        "format": "ls [params] [pathName]",
        "params": [
            "-a 显示所有文件及目录 (.开头的隐藏文件也会列出)",
            "-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出",
            "-r 将文件以相反次序显示(原定依英文字母次序)",
            "-t 将文件依建立时间之先后次序列出",
            "-A 同-a,但不列出 . (目前目录) 及 .. (父目录)",
            "-F 在列出的文件名称后加一符号;例如可执行档则加 *, 目录则加 /",
            "-R 若目录下有文件,则以下之文件亦皆依序列出"
        ],
        "desc": "用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。",
        "example": ""
    },
    {
        "cmd": "mkdir",
        "format": "mkdir [-p] dirName",
        "params": [
            "-p 确保目录名称存在,不存在的就建一个"
        ],
        "desc": "用于创建目录",
        "example": ""
    },
    {
        "cmd": "mv",
        "format": "mv [options] source [dest|directory]",
        "params": [
            "-b 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。",
            "-i 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。",
            "-f 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。",
            "-n 不要覆盖任何已存在的文件或目录。",
            "-u 当源文件比目标文件新或者目标文件不存在时,才执行移动操作"
        ],
        "desc": "用来为文件或目录改名、或将文件或目录移入其它位置",
        "example": ""
    },
    {
        "cmd": "pwd",
        "format": "pwd",
        "params": [],
        "desc": "用于显示工作目录",
        "example": ""
    },
    {
        "cmd": "rm",
        "format": "rm [options] name...",
        "params": [
            "-i 删除前逐一询问确认",
            "-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认",
            "-r 将目录及以下之档案亦逐一删除"
        ],
        "desc": "用于删除一个文件或者目录",
        "example": ""
    },
    {
        "cmd": "touch",
        "format": " touch [-cm][-d<日期时间>][-r<参考文件或目录>] [文件或目录…]",
        "params": [
            "-m 改变档案的修改时间记录。",
            "-c 假如目的档案不存在,不会建立新的档案",
            "-d 设定时间与日期,可以使用各种不同的格式",
            "-r 使用参考档的时间记录,与 --file 的效果一样"
        ],
        "desc": "用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。",
        "example": ""
    }
]

var arr = []
var reg = new RegExp('c')
list.forEach(v => {
    if (v.cmd.match('d')) {
        arr.push(v)
    }
})
console.log(arr)
console 命令行工具 X clear

                    
>
console