Bash 通配符重复匹配

Bash 通配符重复匹配

Bash 能列出重复的字符串吗?假设我想匹配文件

config_foo_foo.txt
config_bar_bar.txt

但不是

config_foo_bar.txt

就像是

ls -l config_*_*.txt

匹配所有三个。我是否必须使用诸如 grep 和正则表达式之类的东西来获取行为

答案1

斯科特的答案看起来是对的。使用 find 命令,结果如下所示:

1.

find * -maxdepth 0 -regex "^config_\(.*\)_\1\.txt$"

输出:

config_foo_foo.txt
config_bar_bar.txt

2.

find . -mindepth 1 -maxdepth 1 -regex "^\./config_\(.*\)_\1\.txt$"

输出:

./config_foo_foo.txt
./config_bar_bar.txt

答案2

是的,尝试以下代码(使用扩展globs ):

shopt -s extglob
ls config_!(*foo_bar*).txt

答案3

我相信你可能需要做类似的事情

命令$(ls -d config_*_*.txt | grep '^config_\(.*\)_\1\.txt$')

相关内容