Grep具有特定下划线图案的文件名

Men*_*sch 0 regex linux bash grep redhat

我试图使用egrep和regex从文件中获取模式而没有成功.

我需要的是获取一个文件,例如一个约定名称:

xx_code_lastname_firstname_city.doc
Run Code Online (Sandbox Code Playgroud)

代码应至少有3位数字,姓氏和名字以及城市的大小可能会有所不同

我正在尝试下面的代码,但它无法实现我想要的:

ls -1  | grep -E "[xx_][A-Za-z]{3,}[_][A-Za-z]{2,}[_][A-Za-z]{2,}[_][A-Za-z]{2,}[.][doc|pdf]"
Run Code Online (Sandbox Code Playgroud)

那是试图从开始获取标准xx_,然后是任何至少有3个单词的代码,之后它必须有另一个下划线,依此类推.有人可以帮忙吗?

Cha*_*ffy 5

考虑一个extglob,如下:

#!/bin/bash
shopt -s extglob # turn on extended globbing syntax

files=( xx_[[:alpha:]][[:alpha:]]+([[:alpha:]])_[[:alpha:]]+([[:alpha:]])_[[:alpha:]]+([[:alpha:]])_[[:alpha:]]+([[:alpha:]]).@(doc|docx|pdf) )

[[ -e ${files[0]} ]] || -L ${files[0]} ]] && printf '%s\n' "${files[@]}"
Run Code Online (Sandbox Code Playgroud)

这是因为

[[:alpha:]][[:alpha:]]+([[:alpha:]])
Run Code Online (Sandbox Code Playgroud)

...匹配三个或更多字母字符的任何字符串 - 其中两个显式,其中一个具有+()一个或多个extglob语法.


同样的,

@(doc|docx|pdf)
Run Code Online (Sandbox Code Playgroud)

...匹配这三个特定字符串中的任何一个.