我需要检索 bash 脚本的文件名。我以为
mc ls
可以做 ls 可以做的所有事情,但我似乎错了。所以现在我正在与 regex 作斗争。
当我这样做
mc ls minio/bucket1/
时,我会得到:
[2021-05-14 11:15:18 CEST] 0B files1/
[2021-05-14 11:15:18 CEST] 0B files2/
[2021-05-14 11:15:19 CEST] 0B file1.ext
[2021-05-14 11:15:18 CEST] 0B file2.ext
如何在 bash 中只提取文件名?
您可以在
sed
命令之后通过管道传输以下 mc ls
命令:
sed -n 's/^\[[^][]*][[:blank:]]*[^[:blank:]]*[[:blank:]]\(.*\.gpkg\)$/\1/p'
查看在线演示。
详情:
-n
- 抑制默认行输出s
- 替换命令^\[[^][]*][[:blank:]]*[^[:blank:]]*[[:blank:]]*\(.*\.gpkg\)$
- 匹配的正则表达式
^
- 字符串的开头\[[^][]*]
- [
和 ]
之间的子字符串,内部没有方括号[[:blank:]]*
- 零个或多个水平空白[^[:blank:]]*
- 零个或多个非水平空白字符[[:blank:]]*
- 零个或多个水平空白\(.*\.gpkg\)
- 第 1 组:任何文本,然后 .gpkg
$
- 字符串结尾\1
- 将比赛替换为第 1 组值p
- 打印替换结果。mc 支持 json 输出格式,你也可以这样做:
./mc ls myminio/bucket1 --json | jq ".key"
"files1/"
"files2/"
"file1.ext"
"file2.ext"
使用--print {base}选项
mc find minio/bucket1 --print {base}