如何从Linux下mc ilm rule ls命令输出中提取ID列表?
提取MinIO ILM规则ID的方法
在Linux环境执行
mc ilm rule ls myminio/receive后得到如下输出:┌───────────────────────────────────────────────────────────────────────────────────────┐ │ Expiration for latest version (Expiration) │ ├──────────────────────┬─────────┬────────┬──────┬────────────────┬─────────────────────┤ │ ID │ STATUS │ PREFIX │ TAGS │ DAYS TO EXPIRE │ EXPIRE DELETEMARKER │ ├──────────────────────┼─────────┼────────┼──────┼────────────────┼─────────────────────┤ │ cf59qti8ufll86j92g │ Enabled │ - │ - │ 90 │ false │ │ cf7701klgt9a0vts40 │ Enabled │ - │ - │ 90 │ false │ │ cf7712tlgie49qo4p0 │ Enabled │ - │ - │ 90 │ false │需要提取仅包含ID的列表,预期输出:
cf59qti8ufll86j92g cf7701klgt9a0vts40 cf7712tlgie49qo4p0
以下是几种实现方式:
使用awk处理
利用awk按字段分割,跳过表头和分隔线后提取ID列,同时清理多余空格:mc ilm rule ls myminio/receive | awk -F'│' 'NR>4 {gsub(/^[ \t]+|[ \t]+$/, "", $2); print $2}'说明:
-F'│'以│作为字段分隔符NR>4跳过前4行(表头和分隔线)gsub命令去除ID前后的空格- 最后输出处理后的ID字段
结合grep和sed提取
先过滤出含ID的行,再精准提取ID字符串:mc ilm rule ls myminio/receive | grep -E '│ [a-z0-9]+ │' | sed -E 's/^.*│ ([a-z0-9]+) .*$/\1/'说明:
grep匹配符合ID格式(小写字母+数字)的行sed用正则捕获并提取中间的ID部分
用cut多步过滤
先截取目标列,再逐步清理无效内容:mc ilm rule ls myminio/receive | cut -d'│' -f2 | sed '/^[ \t]*$/d' | sed '1,3d' | sed 's/^[ \t]*//;s/[ \t]*$//'说明:
cut截取第二列内容- 第一个
sed删除空行 - 第二个
sed删除前3行表头 - 第三个
sed去除ID前后的空格
内容的提问来源于stack exchange,提问作者K Akshay
相关产品推荐
相关产品推荐

