bash在echo -e格式的文本上使用列

时间:2019-01-09 16:01:05

标签: bash formatting

我正在尝试创建bash脚本以检查abaqus包含的标头。 主要使用的功能是grep,echo和column。

输出应该是突出显示错误的表(仅检查字符串,如果字符串不正确,我希望它显示为红色。) 表很好,无需格式化。一旦我开始在echo -e中使用粗体格式,列函数就会停止工作。

有人知道如何解决吗?

header 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'

0 个答案:

没有答案