【问题标题】:What is ^X in in Linux?Linux 中的 ^X 是什么?
【发布时间】:2015-02-26 02:21:00
【问题描述】:

对于我的家庭作业,我必须确保我的输出与解决方案输出 100% 匹配,否则我不会获得学分。

我的输出是:

hw05-data-10.txt:最小值 = 5,最大值 = 90,平均值 = 51.23,方差 = 618.34

解决方案输出为:

hw05-data-10.txt:最小值 = 5,最大值 = 90,平均值 = 51.23,方差 = 618.34

它们看起来很相似,但是当我使用 diff mine.txt solution.txt 时,我得到了不同。

我使用cat -tev mine.txtcat -tev solution.txt 来查找差异,我发现我的看起来像:

hw05-data-10.txt^X : min = 5,max = 90,mean = 51.23,variance = 618.34$

解决方案如下:

hw05-data-10.txt:最小值 = 5,最大值 = 90,平均值 = 51.23,方差 = 618.34$

^X 是什么?我试过环顾四周,但找不到答案。如何从我的输出中删除它?这是一个 C 程序。

【问题讨论】:

  • 没有看过你的 C 程序,或者它是如何生成的(重新格式化输入数据?)没有人能告诉你如何修复它。
  • 由于问题是由C程序引起的,如果将其编辑为C编程问题而不是OS问题会更好(不要忘记更新标签)。跨度>

标签: c character output cat


【解决方案1】:

^XCTRL-X 字符,通过 cat-v 标志可见。

如果你想摆脱它,你可以通过以下方式传递内容:

tr -d '[:cntrl:]'

请参阅以下记录以获取示例(^X 使用 CTRL-VCTRL-X 插入到 bash):

pax> echo '123^X456' | cat -v
123^X456

pax> echo '123^X456' | tr -d '[:cntrl:]' | cat -v
123456

如果您想在 中删除它而不是在事件发生后过滤,您需要调查创建mine.txt 文件的程序。它将是插入流氓角色的那个。

【讨论】:

  • 检查创建输出的程序为什么要写控制字符并从源头去掉它不是更好吗?
【解决方案2】:

根据cat 命令的手册页,

-v 标志:显示非打印字符,使其可见。对于 control-X,控制字符打印为^X;删除字符(八进制 0177)打印为 ^?。非 ASCII 字符(设置了高位)打印为M-(用于元),后跟低 7 位的字符

-e 标志:显示非打印字符(参见 -v 选项),并在每行末尾显示一个美元符号 (`$')。

因此,^X 的答案是Control Character。要从输出中删除,请尽可能从您的 cat 命令中删除 -v-e 标志。如果不能,您必须调查您的 C 程序:为什么它会生成此控制字符。

【讨论】:

  • 即使删除 -v 标志,它仍然使用 ^X 打印相同的输出。运行程序后,不显示^X,即使我使用cat mine.txt,仍然不显示^X。但是,当我在 vim 中打开 mine.txt 时,它会显示 ^X。我很困惑。
  • 进一步查看手册页,-e 标志还指示cat 命令显示非打印字符。使用命令man cat 了解更多信息。
  • 最有可能(通过查看实际代码)输出缓冲区中有一些垃圾,可能在带有文件名的字段中。将字段预先设置为全部 '\0' 将消除垃圾。
  • @Hazim,^X您的 C 程序生成。您必须查看该程序的源代码以了解它为什么在输出中生成它。您尚未发布代码,因此无法提供更多帮助。 cat(1)-v 选项只是查看(诊断问题,不修复)你的输出和老师的输出有什么区别。您必须编辑您的源文件并从您正在调用的输出例程中删除该控制字符
【解决方案3】:

^X是ASCII CAN,取消控制字符。通常 linux tty 驱动程序在输出时不使用它,因此在输出到终端时您不会看到它。如果在输入中使用它,linux tty 驱动程序会将其解释为STOP 字符,并将SIGSTOP 信号发送到前台进程,使其停止执行,直到收到SIGSTART 信号。您提到的字符可能在某种程度上插入了您用于 printf(3) 调用的格式字符串中。 (您没有在问题中显示您的代码 sn-p)

^X 字符在某些窗口环境中也用于剪切选定的文本,因此您可能将它插入到程序源代码中的某个不希望的位置。

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2013-01-13
    • 2018-05-26
    • 1970-01-01
    • 2015-09-23
    • 2012-08-15
    相关资源
    最近更新 更多