在Linux上有没有办法将文本以不同颜色输出到文件中? < >我用C++在Linux上输出数据到TXT文件。有没有办法以不同的颜色输出文本行的一部分

在Linux上有没有办法将文本以不同颜色输出到文件中? < >我用C++在Linux上输出数据到TXT文件。有没有办法以不同的颜色输出文本行的一部分,c++,linux,text-files,C++,Linux,Text Files,例如,我希望能够用红色书写0.000瓦 此型号的总功耗:0.000瓦最好的方法是通过curses库: 最好的方法是通过curses库: 如果您愿意在文件中嵌入ANSI终端转义码,请确定 下面是一个使用Ruby进行伪代码的示例。(#{expr}语法仅使用%s或%d格式化expr,并将其插入字符串中。) 您可以使用curses或termcap,但这将更加复杂,而且在今天是不必要的,因为每个Linux(和Mac)终端窗口都会毫无问题地吃掉ANSI代码 如果随后通过less(1)查看此文件或直接输出,则

例如,我希望能够用红色书写0.000瓦


此型号的总功耗:0.000瓦

最好的方法是通过curses库:


最好的方法是通过curses库:


如果您愿意在文件中嵌入ANSI终端转义码,请确定

下面是一个使用Ruby进行伪代码的示例。(#{expr}语法仅使用%s或%d格式化expr,并将其插入字符串中。)

您可以使用curses或termcap,但这将更加复杂,而且在今天是不必要的,因为每个Linux(和Mac)终端窗口都会毫无问题地吃掉ANSI代码

如果随后通过less(1)查看此文件或直接输出,则需要使用
less-R


更新:C++

#include <iostream>
using namespace std;

void color(const char *s, int n) {
  cout << "\e[" << (31 + n % 7) << "m" << s << "\e[0m";
}

int main() {
  color("How now", 0);
  color(" brown cow", 1);
  color(" Now is the", 2);
  color(" time.", 3);
  cout << endl;
  return 0;
}
#包括
使用名称空间std;
空颜色(常量字符*s,整数n){

cout如果您愿意在您的文件中嵌入ANSI终端转义码,那么当然可以

下面是一个使用Ruby进行伪代码的示例。#{expr}语法只是将expr格式化为%s或%d,并将其插入字符串中

您可以使用curses或termcap,但这将更加复杂,而且在今天是不必要的,因为每个Linux(和Mac)终端窗口都会毫无问题地吃掉ANSI代码

如果随后通过less(1)查看此文件或直接输出,则需要使用
less-R


更新:C++

#include <iostream>
using namespace std;

void color(const char *s, int n) {
  cout << "\e[" << (31 + n % 7) << "m" << s << "\e[0m";
}

int main() {
  color("How now", 0);
  color(" brown cow", 1);
  color(" Now is the", 2);
  color(" time.", 3);
  cout << endl;
  return 0;
}
#包括
使用名称空间std;
空颜色(常量字符*s,整数n){

cout纯文本文件(*.txt)不支持任何颜色。您必须使用不同的格式,如RTF或HTML。

纯文本文件(*.txt)不支持任何颜色。您必须使用不同的格式,如RTF或HTML。

如果您只想使用简单的格式,可以使用中的代码

const char COL_RESET[]=“\x1b[0m”;
常量字符红色[]=“\x1b[31m”;

cout如果您只想做简单的工作,可以使用中的代码

const char COL_RESET[]=“\x1b[0m”;
常量字符红色[]=“\x1b[31m”;

cout有关ANSI转义码(有时也称为VT100转义码)的更多信息,请参阅。

有关ANSI转义码(有时也称为VT100转义码)的更多信息请参阅。

如果您使用vim之类的工具查看txt文件。可以添加将某些特定单词与特定颜色相匹配的语法文件。这种方法的好处是,您不需要使用html标记等在txt文件内部添加任何颜色信息。但是,由于颜色在vim集合中,因此无法移植不管怎样。

如果您使用vim之类的工具查看txt文件。可以添加语法文件,使某些特定单词与特定颜色相匹配。这种方法的好处是,您不必使用html标记等在txt文件内部添加任何颜色信息。但是,由于颜色在您的文本中,因此无法移植无论如何,vim设置。

这取决于您对文本文件所做的操作。如果您使用的是
cat
更多
(甚至
grep
,请注意),或者直接输出到终端窗口,您可以使用ANSI颜色代码,如@DigitalRoss和其他一些建议。但是,如果您使用几乎任何其他内容来查看文件--
less
、Vim、EMACS、gedit、Firefox等--将没有颜色,取而代之的是,您体内看起来像垃圾r文本文件

所以你的问题的答案是“是的,但是”:是的,有一种方法可以在文本文件中添加颜色,但除非它直接显示在VT100兼容的终端上,而无需解释,否则它不起作用。因此,我不会对我想提供给其他人的文本文件使用控制代码,因为我不知道他们将如何查看它,我严重怀疑他们是否会使用
cat


然而,如果你打算让你的程序直接写入终端,带上色码进城去吧。但最好能添加一些方法来关闭它们,因为其他人可能想将你的程序输出重定向到一个文件,而不必过滤掉它们。

这取决于你对文本文件所做的操作唱
cat
more
(甚至
grep
,附带警告),或者直接输出到终端窗口,您可以使用ANSI颜色代码,如@DigitalRoss和其他一些建议。但是,如果您使用几乎任何其他内容来查看文件--
less
、Vim、EMACS、gedit、Firefox等--将没有颜色,取而代之的是,您体内看起来像垃圾r文本文件

所以你的问题的答案是“是的,但是”:是的,有一种方法可以在文本文件中添加颜色,但除非它直接显示在VT100兼容的终端上,而无需解释,否则它不起作用。因此,我不会对我想提供给其他人的文本文件使用控制代码,因为我不知道他们将如何查看它,我严重怀疑他们是否会使用
cat


但是,如果您打算让程序直接写入终端,请带上颜色代码进城。但最好添加一些方法来关闭它们,因为其他人可能希望将程序的输出重定向到文件,而不必过滤它们。

您能用HTML编写程序,然后将其呈现为HTML吗?如果是,请编写0.000瓦特这个问题似乎意味着“然后在终端/xterm窗口中查看
cat(1)
less(1)
。您可能需要澄清这一点,因为您有两个答案:一个是做出假设的,另一个是
#include <stdio.h>

void colorize(const char *s, const char *code) {
  printf("%s%s\e[0m", code, s);
}

void color(const char *s, int n) {
  char t[32];

  sprintf(t, "\e[%dm", 31 + n % 7);
  colorize(s, t);
}

int main(void) {
  color("How now", 0);
  color(" brown cow", 1);
  color(" Now is the", 2);
  color(" time.\n", 3);
  return 0;
}
const char COL_RESET[] = "\x1b[0m";
const char RED[]       = "\x1b[31m";
cout << RED << "Red looks good" << COL_RESET << endl;