【问题标题】:How do I delete the first line in a file?如何删除文件中的第一行?
【发布时间】:2011-02-08 18:55:32
【问题描述】:

我无法搜索特定字符串,因为它们都非常相似,但我想要一些简单的方法来删除文件中的前 4 行。

它们也是可变长度的。我已经考虑过 perl,这一切似乎比我想象的要难,但如果可能的话,我想用 Perl、AWK 或 shell 命令来做。

有人有简单的方法吗?

【问题讨论】:

  • 注意:你应该使用destructive_process file > tempfile && mv tempfile file而不是destructive_process file > tempfile; mv tempfile file&& 而不是 ; 可以防止在出现错误时覆盖原始文件,因为如果第一部分成功,它只会执行第二部分。

标签: perl file-io awk line


【解决方案1】:
tail -n+2 filename

将跳过filename 中的第一行并将其输出到标准输出。 -n+2 选项表示从第二行开始输出行。

当然,您可以将 2 替换为您需要的任何数字(您的标题和实际问题内容分别表示第一个和第五个)。

【讨论】:

  • +1:这个解决方案比我的要好得多。我不知道你可以将+3 之类的东西传递给-n
【解决方案2】:

sed 是最简单的。要删除文件的第一行,请执行以下操作:

sed '1d' file.txt

或者,要删除前四行,请执行以下操作:

sed '1,4d' file.txt

【讨论】:

  • 嗯,太完美了!感谢所有建议 sed 的人(虽然 -i 不适用于这个版本)
  • 发帖前有没有用大行测试过命令?虽然没有要求,但它不适用于超过 15 MB 的行。
【解决方案3】:

跳过前 4 行

$ awk 'NR>4' file >temp;mv temp file

$ more +5 file >temp;mv temp file

$ perl -i.bak -ne '$.>=4 && print' file

【讨论】:

  • 如果要删除的行数可变:awk -v n=$num 'NR>n' file
【解决方案4】:
sed -i '1,4d' <filename>

将删除其输入文件的前四行。 (如果你只想删除第一行,你可以改用'1d'。)

-i 标志代表就地编辑,这意味着输入文件也是输出文件,因此更改会被写回原始文件。如果您希望文件保持原样并将修改后的内容简单地写入标准输出,只需省略 -i

这个和许多其他的sed 1-liners 可以在这里的方便参考中找到:

http://sed.sourceforge.net/sed1line.txt

【讨论】:

    【解决方案5】:
    tail -n +5 file > temp
    mv temp file
    

    【讨论】:

      【解决方案6】:
      perl -pe'1..4and$_=""'
      

      相当于

      sed 1,4d
      

      perl -ne'1..4or print'
      

      相当于

      sed -n '1,4!p'
      

      您可以使用-ised 相同。

      【讨论】:

      • @daotoad:我注意到触发器很少使用。即使对于中等经验的 Perl 开发人员,我也注意到了这一点。乍一看,文档可能看起来很复杂。
      【解决方案7】:

      不需要脚本语言(如 awk、sed、perl 等)的解决方案:

      tail -n `expr \`cat FILE | wc -l\` - 1` FILE > FILE.new; mv FILE.new FILE
      

      这个想法是计算文件中的行数,然后减一,然后将结果传递给'tail'命令。

      【讨论】:

      • cat 是干什么用的?直接在文件上做wc。此外,tail 理解 -n +5,从第 5 行开始输出。
      • 啊,我不知道你可以将'+N'传递给tail的-n开关。请参阅 Mark Rushakoffs 的答案以获得比我的更好(和更有效)的解决方案。
      • 为了迂腐,它使用一种脚本语言:shell script :)
      • @Svante:需要cat,以便wc 的输出不包含文件名。
      • wc -l &lt; file 将隐藏文件名而不使用cat
      【解决方案8】:

      试试这个:sed -i 1d file

      一般规则:

      删除n 第一行:sed '1,nd' file.txt
      例如:sed '1,4d' file.txt 删除前 4 行

      【讨论】:

        【解决方案9】:

        使用 File::Tie。这样就好了。

        【讨论】:

          【解决方案10】:

          在文件中搜索第四个“\r\n”或“\n”以及该索引中的子字符串。

          【讨论】:

            猜你喜欢
            • 2023-03-23
            • 2013-12-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多