Per*_*seP 2 bash numbers ls file find
我有一个包含这些文件的目录:
1.html 22.html 333.html zxc.html
Run Code Online (Sandbox Code Playgroud)
我想获得一个只有名字中有数字的html文件列表:
1.html 22.html 333.html
Run Code Online (Sandbox Code Playgroud)
我认为这会奏效
find . -regex '^[0-9]+\.html'
Run Code Online (Sandbox Code Playgroud)
要么
ls -al | grep -E '^[0-9]+\.html$'
Run Code Online (Sandbox Code Playgroud)
但我一无所获.我的想法是获取名称中仅有数字的html文件,并将它们传递给sed进行替换.我正在使用linux和bash
find-regex与整个路径的匹配,而不仅仅是文件名(我自己似乎每次使用它时都会忘记这一次).
因此,您可以使用:
find . -regex '.*/[0-9]+\.html'
Run Code Online (Sandbox Code Playgroud)
(^并且$没有必要,因为它总是在整个路径上进行测试.)
find当你想对文件做一些事情时,使用也有好处,例如使用内置-exec,-print0管道xargs -0甚至(甚至使用Bash):
while IFS='' read -r -d '' file
do
# ...
done < <(find . -regex '.*/[0-9]+\.html' -print0)
Run Code Online (Sandbox Code Playgroud)
echols|grep当文件名包含空格(甚至是换行符)时,使用glob 等等往往会停止工作(我意识到在这种情况下不会发生这种情况;更多的是未来打样和养成良好习惯的问题).
使用扩展的glob:
$ shopt -s extglob
$ echo +([0-9]).html
1.html 22.html 333.html
Run Code Online (Sandbox Code Playgroud)
与extglob启用,+(pattern)相匹配的一种或多种pattern。请注意,我只是echo用来显示匹配的文件-如何使用glob取决于您要如何处理。
要在单独的行上打印每个文件,可以使用:
printf '%s\n' +([0-9]).html
Run Code Online (Sandbox Code Playgroud)
每个与模式匹配的文件都作为一个单独的参数传递给printf您,因此您不必担心文件名中的空格或其他有趣的字符。
要遍历这些文件,它很简单:
for file in +([0-9]).html; do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
同样,shell会解决有趣的文件名所带来的任何潜在问题,因此您不必担心。