bash - bash 在 echo -e 格式化文本上使用列
问题描述
我正在尝试创建 bash 脚本来检查 abaqus 包含的标头。主要使用的函数是 grep、echo 和 column。
输出应该是带有突出显示错误的表格(只是检查字符串,如果字符串不正确,我希望它打印红色。)表格很好,没有格式化。一旦我开始在 echo -e 中使用粗体格式,列功能就会停止工作。
有人知道如何解决吗?
头文件inc1.inc:
**
** label = AAAAA
** project = /Data/BBB/CCC
** phase = VD
**
没有格式化的表格(如预期的那样):
submodel label project phase
inc1.inc AAAAA /Data/BBB/CCC VD
inc2.inc YY /Data/ZZ/Z VPP
inc3.inc PPP-23 /Data/OP/HJK22/OK KKKKK
第一行第一列加粗的表格(粗体无法显示,请尝试在控制台执行代码):
submodel label project phase
inc1.inc AAAAA /Data/BBB/CCC VD
inc2.inc YY /Data/ZZ/Z VPP
inc3.inc PPP-23 /Data/OP/HJK22/OK KKKKK
代码:
#!/bin/bash
### ========== variables ==========
FORMATRESET="\e[0m"
FORMATBOLD="\e[1m"
FORMATERROR="\e[1;5;48;5;9m"
PATTERNS=("label" "project" "phase")
### ========== functions ==========
HCK () {
echo -e -n "${FORMATBOLD}submodel${FORMATRESET}\t"
for PATTERN in ${PATTERNS[@]}; do
echo -e -n "${FORMATBOLD}${PATTERN}${FORMATRESET}\t"
done
echo
for SUBMODEL in $@; do
echo -e -n "${FORMATBOLD}${SUBMODEL%\*\*}${FORMATRESET}\t"
for PATTERN in ${PATTERNS[@]}; do
FOUND=($(grep "** ${PATTERN}" ${SUBMODEL} | awk '{print $4}'))
echo -e -n "${RESETFORMAT}${FOUND}${RESETFORMAT}\t"
done
echo
done
}
HCKwoFORMATTING () {
echo -e -n "submodel\t"
for PATTERN in ${PATTERNS[@]}; do
echo -e -n "${PATTERN}\t"
done
echo
for SUBMODEL in $@; do
echo -e -n "${SUBMODEL%\*\*}\t"
for PATTERN in ${PATTERNS[@]}; do
FOUND=($(grep "** ${PATTERN}" ${SUBMODEL} | awk '{print $4}'))
echo -e -n "${FOUND}\t"
done
echo
done
}
### ========== execution ==========
HCK * |column -t -s $'\t'
echo
HCKwoFORMATTING * | column -t -s $'\t'
解决方案
推荐阅读
- java - 在已运行的应用程序中从文件浏览器打开文件
- c# - 来自 String.IndexOf 的意外结果
- javascript - 使用节点JS重定向,路径必须是绝对路径或指定根到 res.sendFile
- flutter - Flutter - 每次数据更改时如何更改小部件
- reactjs - 在反应应用程序中向 package.json 添加主页字段而不是转换为构建
- coq - Coq Z_3 组定义左 id 定理
- amazon-web-services - 使用 Deploy 命令的 Cloudformation CLI 参数
- java - 在 MotionLayout 中使用时如何使 PlayerView 在横向模式下全屏
- rxjs - .pipe(takeUntil) 在不应该听的时候正在听
- python - 如何使用 HTML 格式化包含表单数据的电子邮件?