【问题标题】:How to delete nth character in a file using sed如何使用 sed 删除文件中的第 n 个字符
【发布时间】:2014-09-09 05:02:00
【问题描述】:

我必须删除一个大文件中第 n 个位置的字符。 Vi 挂起这么大的文件。我知道sed 中会有一些简单的命令来执行此操作。但是,我发现很难理解sed 脚本及其表达式。

我拥有的文件内容如下:

{"query": "Lock and", "timestamp": "2012-12-28T00:00:00.045000+00:00", "productId": 322506},,{"query": "Velvet Crush", "timestamp": "2012-12-28T00:00:00.045000+00:00", "productId": 134363}

我必须删除那个额外的,,它是该文件中的130405 th 字符。我如何使用 sed 来实现这一点。

编辑:

现在我希望用一个就地替换所有双逗号的 aoocurances。怎么可能?

【问题讨论】:

    标签: linux file-io sed


    【解决方案1】:

    sed -i 's/.//130405' FILE

    这会在原地 (-i) 编辑文件 (FILE),删除位置 130405 处的任何字符 (.)

    【讨论】:

    • +1,我不知道为什么我想出了这么尴尬的 sed 行……写了这么多s/foo/bar/1,2,3,忘记了130405
    • 如何就地删除所有重复出现的逗号?
    【解决方案2】:

    既然有cut,为什么还要sed

    cut -c -130404,130406-
    

    【讨论】:

    • 我不明白为什么这不能回答这个问题。 cut 完美解决了 OP 从每行中删除多个字符的问题。
    【解决方案3】:

    甚至不用担心双逗号的确切位置,并假设您要修复整个文件中的任何双逗号:

    sed -e 's/,,/,/g' < file > file.new
    mv file.new file
    

    如果您有支持它的sed 版本,您可以sed -i -e '...' file 跳过重定向(但sed -i 本质上仍然做同样的事情,只是使用一个临时文件)。

    【讨论】:

    • sed: 无法重新分配内存..可能是由于文件的大小
    • 我认为没有任何方法可以使用标准命令行工具来完成。一个快速的 C/Python/whatever 程序来读取有问题的额外字符之后的部分并提前一个字节重写它们不会太困难,但除非你需要经常这样做,否则它可能真的不值得努力......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多