thi*_*ign 3 regex bash grep ls
我想用以下方式匹配n位数与grep或ls:
echo "ABCD150915.7z" | grep "ABCD[[:digit:]]{6}.7z"
Run Code Online (Sandbox Code Playgroud)
以上是行不通的,我现在尝试了很多方法..怎么做到这一点?
我知道还有其他方法,但请注意我想知道这是否有可能:[[:digit:]]和{6}使用grep或ls.
是的,可以使用以下两种方法之一:
echo "ABCD150915.7z" | grep -E "ABCD[[:digit:]]{6}.7z"
Run Code Online (Sandbox Code Playgroud)
启用扩展正则表达式模式-E意味着可以理解花括号.
或者,你可以逃避花括号:
echo "ABCD150915.7z" | grep "ABCD[[:digit:]]\{6\}.7z"
Run Code Online (Sandbox Code Playgroud)
如果要列出与模式匹配的所有文件,可以使用glob扩展:
ls ABCD[0-9][0-9][0-9][0-9][0-9][0-9].7z
Run Code Online (Sandbox Code Playgroud)
...如果你正在考虑循环浏览这些文件,你应该这样做:
for file in ABCD[0-9][0-9][0-9][0-9][0-9][0-9].7z; do
# stuff with "$file"
done
Run Code Online (Sandbox Code Playgroud)
建议failglob在这两种情况下启用(使用shopt -s failglob),这样当没有文件与模式匹配时,不执行命令/循环.
在[0-9]这些例子中是不完全一样的[[:digit:]],所以如果你需要严格匹配任何被认为是数字的,那么你应该使用来代替.
要明确的是,当你这样做时ls ABCD[0-9][0-9][0-9][0-9][0-9][0-9].7z,shell会在将glob 传递给参数列表之前将其扩展为参数列表ls,因此ls除了回显这些参数之外,它实际上并没有做太多.这与传递给的单引号参数形成对比grep,后者被解释grep为正则表达式.Glob表达式和正则表达式是两个不同的东西,所以你不能指望它们的语法是相同的.
| 归档时间: |
|
| 查看次数: |
7378 次 |
| 最近记录: |