V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
adrianzhang
V2EX  ›  问与答

Linux 或 Mac 上有没有类似“文本整理器”这样的工具

  •  
  •   adrianzhang · 1 天前 · 932 次点击
    有一些 TXT 文件,格式是回车截断的,宽度不同,例子放在下面,需要改成无硬格式的文本。
    Windows 上有“文本整理器”这样的软件可以处理,但难以跟其他工具做成整个处理流,例如,处理好 TXT 格式后还要处理错别字标点等,还要制作成不同文件格式等工作,所以想找找 Linux 上有没有类似软件。
    搜了半天也找不到,关键词都不知道用什么好。

    例子如下:

    我用 P4 看小说 P4 被
    我摔坏了 内屏坏了
    暂时不能修 小半个
    屏黑了 所以要让小
    说每行 10 个字就能看

    正好下到个小说就是
    这样的 但是其余的
    不会排版
    百度知道里讲什么调
    整 TXT 文件宽度的根
    本没用 拉开后还是
    满的!!
    50 分很高了吧!!一
    定要随便复制出来贴
    在哪里都达到上面的
    效果才算!!
    24 条回复    2024-10-08 10:33:33 +08:00
    renmu
        1
    renmu  
       1 天前 via Android
    你想去除换行?随便哪个语言实现都很容易
    adrianzhang
        2
    adrianzhang  
    OP
       1 天前
    @renmu 有很多文件,宽度各个不同,段落间空行数等也不同,空格或 Tab 也乱,总之就是排版乱七八糟的。这么一堆文件需要处理,是需要一个程序的。这不知道了 Windows 有,想看看 Linux 的有没有。
    diivL
        3
    diivL  
       1 天前
    sed, awk
    adrianzhang
        4
    adrianzhang  
    OP
       1 天前
    @diivL 怎么判断宽度呢?
    mayli
        5
    mayli  
       1 天前
    推荐自学正则
    adrianzhang
        6
    adrianzhang  
    OP
       1 天前
    @mayli 学的不精。怎么用正则判断?
    imjiaoyuan
        7
    imjiaoyuan  
       1 天前 via Android
    可以用 AI 写吧,Linux 下用正则其实挺容易实现的个人感觉
    adrianzhang
        8
    adrianzhang  
    OP
       1 天前
    @imjiaoyuan 确实想过这个途径,但不知道该向 AI 提供什么样问题才能得到答案。
    合并行?不对。
    june4
        9
    june4  
       1 天前
    都不用正则,几行代码就行了。先把 2 个以上连续回车的替换成一个特殊文字,然后把一个回车的替换成空字符串,再把特殊文字替换回二个回车,搞定。
    adrianzhang
        10
    adrianzhang  
    OP
       1 天前
    @june4 用 Word 是这么整理的。但是 Linux 下怎么干呢?
    june4
        11
    june4  
       1 天前   ❤️ 1
    我以前写过一个,找了下还在 注意这里我转的文件都是\r\n 换行的,你看你的情况可能要改一下

    #!/usr/bin/node
    const assert = require('node:assert/strict')
    const fs = require('node:fs')
    const filename = process.argv[2]
    assert(filename, 'Missing filename arg')
    console.log('=> Filename:', filename)

    const TMP_LINE = '{{TMP_LINE}}'
    let content = fs.readFileSync(filename, 'utf-8')
    content = content.replaceAll(/\r\n\r\n/g, TMP_LINE + TMP_LINE)
    content = content.replaceAll(/\r\n/g, '')
    content = content.replaceAll(TMP_LINE, '\n')
    fs.writeFileSync(filename + '.joined', content)
    saranz
        12
    saranz  
       1 天前
    这个不就是找到 \n \r 然后删除的事嘛,就是用 shell 都能办的事。
    adrianzhang
        13
    adrianzhang  
    OP
       1 天前
    @june4 #11 谢谢!我试试看。
    adrianzhang
        14
    adrianzhang  
    OP
       1 天前
    @saranz #12 不一定啊,也许有\n\n 等等各种情况。
    LaTero
        15
    LaTero  
       1 天前 via Android   ❤️ 1
    把不是紧跟着标点符号的\n 删掉试试
    adrianzhang
        16
    adrianzhang  
    OP
       1 天前
    @LaTero #15 是个挺好的思路。
    caomu
        17
    caomu  
       1 天前 via Android   ❤️ 1
    可以搜索一下 文本格式化工具 / text format ,有很多现成的工具
    TigerK
        18
    TigerK  
       1 天前
    为什么不让神奇的 AI 替你整理呢?
    adrianzhang
        19
    adrianzhang  
    OP
       1 天前
    @caomu #17 太好了!原来这个关键字。非常感谢!
    adrianzhang
        20
    adrianzhang  
    OP
       1 天前
    @TigerK #18 因为需要批量处理,所以问 AI 也是问程序怎么写,可是我连关键字都不知道,17 楼刚给出来。
    saranz
        21
    saranz  
       1 天前
    @adrianzhang \n\n 不一样是等于\n 吗,反正都是要删除的。
    adrianzhang
        22
    adrianzhang  
    OP
       1 天前
    @saranz #21 嗯,总之很乱,需要程序处理很多情况。
    saranz
        23
    saranz  
       1 天前
    @adrianzhang 万不离其中,最基本的单位就是 \n 。全部换成空值,不就是等于 0 吗。
    adrianzhang
        24
    adrianzhang  
    OP
       1 天前
    @saranz 那怎么分段呢?看例子这样的,段间的分隔也是 n
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:17 · PVG 15:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.