![Bash 通配符重复匹配](https://linux22.com/image/1332928/Bash%20%E9%80%9A%E9%85%8D%E7%AC%A6%E9%87%8D%E5%A4%8D%E5%8C%B9%E9%85%8D.png)
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
是的,尝试以下代码(使用扩展glob
s ):
shopt -s extglob
ls config_!(*foo_bar*).txt
看
man bash | less +/shopt.*optname
- http://wiki.bash-hackers.org/syntax/pattern
- http://mywiki.wooledge.org/glob
答案3
我相信你可能需要做类似的事情
命令$(ls -d config_*_*.txt | grep '^config_\(.*\)_\1\.txt$')