我正在尝试有条件地更改文件内容的颜色。我的文件是:
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,"
,我理解其逻辑是:
- 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
这是假设字段之间有两个空格,正如您最初指定的那样,尽管这似乎已经在编辑中进行了;进行相应调整。
我不知道为什么你认为你原来的方式(匹配一行上的所有文本,将其包裹在两个转义码(黄色)之间会给你多种颜色。