ksh/bash 通过 sed 通过 cat file|sed 命令格式化文件

ksh/bash 通过 sed 通过 cat file|sed 命令格式化文件

我正在尝试有条件地更改文件内容的颜色。我的文件是:

A  B  C  D
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  

我的命令是cat file4 | sed "s,.*,${esc}[33m&${esc}[0m,",我理解其逻辑是:

  1. Cat 该文件,然后通过 sed 命令使用 ANSI 颜色代码编辑内容颜色。

但是当我运行这个文件时,生成的文件并不符合预期:

[33mA  B  C  D[0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m

期望的输出:

  • 字段 A 应为红色。
  • 字段 C 应为蓝色。
  • 字段 D 应为黄色。
  • 字段 B 应为绿色。

答案1

首先,这是一个UUOC对猫的无用利用)。cat这里没有很好的理由使用,sed完全能够读取文件本身,即使不是,那么从文件重定向标准输入将相当于通过管道传输它。

esc=$(echo -e '\e')
sed "s,\(.*\)  \(.*\)  \(.*\)  \(.*\),$esc[31m\1  $esc[34m\2  $esc[33m\3  $esc[32m\4$esc[m," file4

这是假设字段之间有两个空格,正如您最初指定的那样,尽管这似乎已经在编辑中进行了;进行相应调整。

我不知道为什么你认为你原来的方式(匹配一行上的所有文本,将其包裹在两个转义码(黄色)之间会给你多种颜色。

相关内容