我正在使用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。
那么诀窍是什么?我感觉到了细微的变化。
答案 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'