bash正则表达式匹配if语句中的多个前导空格

时间:2015-04-15 05:56:24

标签: regex bash

我正在使用bash来读取包含完整路径文件名的文本文件。有些人将起始fwd-slash作为第一个字符,但大多数都缩进了三个空格,如下所示:

/my/top/level/file
   /my/top/level/file/one_more.txt
   /my/top/level/file/two_more.txt

读取文件没有问题,麻烦是我似乎无法想出正确的模式匹配来从这些缩进行中获取文件名。我正在使用这个:

if [[ $line =~ ^([[:space:]][[:space:]][[:space:]])(.*)$ ]] ; then
    filename_indented=${BASH_REMATCH[2]}
else
    filename=$line
fi

我认为bash模式匹配并不像真正的正则表达式那样复杂,但是我想保持解决方案全部使用sed,而不是使用sed。

那么诀窍是什么?我感觉到了细微的变化。

1 个答案:

答案 0 :(得分:0)

如果您正确阅读文件,read将自动修剪前导空格:

$ while read -r line; do echo "fname '$line'"; done < dat/filenames.txt
fname '/my/top/level/file'
fname '/my/top/level/file/one_more.txt'
fname '/my/top/level/file/two_more.txt'