首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“dos2unix”无法将“file”文件转换为Unix格式

“dos2unix”无法将“file”文件转换为Unix格式
EN

Unix & Linux用户
提问于 2019-07-24 11:53:26
回答 2查看 4.7K关注 0票数 7

我使用script命令记录了我的当前会话,所有信息都保存在一个typescript文件中,但是当我使用Vim打开它时,由于回车,有很多^Ms。

我试图使用dos2unix命令将该文件转换为Unix格式,但我无法这样做。它给出了这个错误:

代码语言:javascript
运行
复制
dos2unix: Binary symbol 0x1B found at line 2,dos2unix: Skipping binary file typescript. 

我只是好奇为什么会发生这种事。为什么scriptCR/LF形式而不是简单的LF形式产生输出?

EN

回答 2

Unix & Linux用户

发布于 2019-07-24 12:37:47

0x1b应该是VT100终端颜色代码或类似代码的一部分。

http://www.termsys.demon.co.uk/vtansi.htm

<ESC>表示ASCII“转义”字符0x1B

一般来说,script记录不是你看到的,而是终端看到的,所以它是原始的终端记录。它甚至可以为scriptreplay记录时间信息,以显示在最初发生的速度中发生了什么……

原始终端只使用\r将光标移动到左侧。即使它不再在纯文本文件中使用,它仍然存在于终端中。到处都是\r,只是大部分时间它对你来说是看不见的。

如果您查看内核源代码,您可以找到如下内容:

代码语言:javascript
运行
复制
static void puts_raw_fixed(int (*puts_raw) (const char *s, int len),
                           const char *s, int count)
{
        const char *s1;

        /* Output '\r' before each '\n' */
        while ((s1 = memchr(s, '\n', count)) != NULL) {
                puts_raw(s, s1 - s);
                puts_raw("\r\n", 2);
                count -= s1 + 1 - s;
                s = s1 + 1;
        }
        puts_raw(s, count);
}

把它当作终端等的技术实现细节.并试图忽略它(只要你不做花哨的终点站的事情)。

如果您不想要原始的录音,也许使用好的旧command > output.txt重定向而不是script,或者简单地.从终端本身复制和粘贴。这应该会产生没有\r的输出,除非命令本身产生这样的原始数据。

否则,可能会在从脚本输出中移除控制字符(包括控制台代码/颜色)上看到这个问题,以获得后处理的类型记录文件。然而,结果可能有所不同。在终端中有很多东西在你没有意识到的情况下发生,而script记录了这一切。

票数 9
EN

Unix & Linux用户

发布于 2020-02-06 09:45:00

代码语言:javascript
运行
复制
try (BufferedReader reader = new BufferedReader(new FileReader("inputFile"));
            FileWriter writer1 = new FileWriter("outPutFile")) {
        String line = reader.readLine();
        String cleanText = "";
        while (line != null ) {
            if(!line.equalsIgnoreCase("[BEGIN TYPESCRIPT]")) {
                line = line.replaceAll("\u001B\\[[\\d;]*[^\\d;]", "");
                cleanText = cleanText + line.replaceAll("\\p{Cntrl}", "") + System.lineSeparator();
            }
            line = reader.readLine();
        }
        writer1.write(cleanText);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

使用此方法,我们可以删除保存在会话记录类型记录文件中的控制字符和VT100转义字符。我添加了一个跳过typeScript头"开始打字记录“的条件。我将每个特殊字符替换为"“。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/531858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档