如何从终端编辑.odt文件?

我经常使用LibreOffice Writer。
我想知道是否有办法通过终端编辑文本?

3我不认为这是一个重复的问题。这个问题询问是否有一个基于文本的终端实用程序可以编辑 .odt 文件。另一个问题是关于使用终端将特定的 .odt 文件启动到 LibreOffice Writer 的完整图形版本。 - Gaultheria
1依我之见,可能更接近这个cat命令不显示文本行 - 这解释了如何解压odt文件以获取底层的content.xml文件。 - steeldriver
最接近你所寻找的东西是 wordgrinder,你可以通过执行 sudo apt install wordgrinder 来安装它。这里 是该项目的官方网站,希望能对你有所帮助。 - galoget
2个回答

你要找的最接近的东西是wordgrinder,它是一个基于终端的文字处理器。
你可以执行以下命令来安装它:
sudo apt install wordgrinder

这是项目的官方网站:https://cowlark.com/wordgrinder/ 这是Github仓库:https://github.com/davidgiven/wordgrinder 还有一个快速生存指南:https://gist.github.com/davidgiven/1aba97e96a9b8f9b573b 如果你查看导入和导出部分,你会发现:

导入

从ODT文件中导入基本内容。OpenDocument很复杂且难以解析,但WordGrinder将尽力应用适当的样式。不支持的功能将被忽略。

导出

这将生成一个ODT文件,可以被LibreOffice和其他主要的文字处理软件读取。字符和段落样式将被导出,并映射到名为P、H1、H2等的OpenDocument样式。


LibreOffice提供了将odt文件转换为纯文本的选项,然后可以使用您喜欢的命令行文本编辑器进行编辑,并且(如果需要)可以再次转换回odt

  1. document.odt 转换为文本格式:

    libreoffice --convert-to txt document.odt
    
  2. 使用您喜欢的文本编辑器编辑文件,例如:

    gedit document.txt
    nano document.txt
    vim document.txt
    
  3. 再次转换回去。 --convert-to 命令需要一个文件扩展名作为参数,但您也可以指定一个文件后缀来防止 libreoffice 覆盖原始文件(它会在不询问的情况下进行覆盖!):

    libreoffice --convert-to _new.odt document.txt
    
对于转换,还有odt2txt,我建议你试试两种方法并比较结果。
如果你使用vim,你可以配置它在后台自动进行转换,参见:在Vim中是否可以轻松处理.odt、.doc、.docx、.rtf和其他非纯文本格式的文件? 那里的答案使用了odt2txt进行转换,但也可以使用libreoffice --convert-to

1如果有人像我一样偶然发现这个,并尝试将其转换为.vimrc文件,以下是对我有效的设置:autocmd BufReadPost *.odt silent %!pandoc "%" -tmarkdown -o /dev/stdoutautocmd BufWritePost *.odt :%!pandoc -f markdown "%" -o "%:r".odt - matt604
这种方法在将.txt转换为.odt时会破坏.odt的格式,如果你先将原始的.odt转换为.txt进行编辑,然后再转换回.odt。 - user58029
@user58029 你说的“破坏了.odt格式”是什么意思?虽然我无法测试,但我不会指望文本格式能在转换中得以保留。如果你想实现这一点,可以尝试将其转换为标记语言,如Markdown或Textile。 - dessert