首页 > 解决方案 > 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'

标签: bashformatting

解决方案


推荐阅读