当前位置: 代码迷 >> 综合 >> Shell Regex
  详细解决方案

Shell Regex

热度:82   发布时间:2024-01-17 20:34:53.0
  1. 如何查找一个匹配特定模式的文件名
    for f in *.sh; do
    if echo $f | grep -q '^[a-zA-Z]+/.sh'; then
    echo $f
    fi
    done

这里我们在当前目录下,查找shell文件,并且,basename只包含ascii字符。这里"/."是必须的,否则就会匹配任意字符。
我们还以用bash的内建"[[...]]",这个运算符中支持正则表达,而且不会进行filename expansion和word splitting,但是会进行parameter expansion和command substitution。这样我们就可以直接编写正则表达式,而不用考虑用quoting。

for f in *.sh; do
if [[ $f =~ ^[a-zA-Z]+/.sh ]]; then
echo $f
fi
done

由于 [[ 是内建的操作符,所以速度比使用echo+grep的方法要快很多。
测试条件:当前目录下有17个shell scripts.

Method Time(s)
ehco + grep 1.890
[[...]] 0.111

使用内建的操作符,要快18倍。

  相关解决方案