迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

在 Bash 中跳过前 X 行后打印文件

作者:迹忆客 最近更新:2023/05/18 浏览次数:

假设你有一个文件,一个很大的文件,你想显示它的内容。 你会怎么做?

您显然不希望打印出文件的全部内容,因为这不太实用。 您可能想要打印一些选择性的行; 也许你会使用正则表达式来解析文件并只打印匹配项。

本文将解释几种方法。


使用 head 和 tail 命令跳过行

下面的示例使用五个最常用的 Bash 命令来执行此操作:

tail fileName.txt
head fileName.txt
tail -n fileName.txt # here n is an integer
head -n fileName.txt # here n is an integer
tail +n fileName.txt # prints all lines starting from
# the nth file

tail 命令的作用是打印文件的最后十行,而 head 命令打印文件的前十行。

当您使用带有 –n 选项的 tail 命令时,它会打印最后 n 行。 相反,当您使用带有 –n 选项的 head 命令时,它会打印前 n 行。

重要的是要注意这里的 n 是一个整数,因此当您执行命令时,您必须将 n 替换为一个整数。

第五个方法有点棘手。 它忽略前 (n – 1) 行并打印其后的所有行。


使用 vim 跳过前 n 行

您也可以使用 Vim 编辑器跳过前 n 行。 Vim 是一个基于控制台的文本编辑器,允许您高效地创建和更改任何文本文档。

要首次使用 Vim,您必须安装它。 使用以下命令执行此操作:

$ sudo apt install vim

现在已经安装了 Vim,我们进入了目的的业务部分,即使用 Vim 跳过前 n 行。

我们将通过使用中间文件来完成。 我们首先将旧文件的内容复制到新文件中; 然后,我们将删除新文件的前 n 行。

我们将使用输入和输出重定向将一个文件的内容复制到另一个文件。 如果学过操作系统课程,应该听说过ppfdt表(进程文件描述符表)。

默认情况下,第一个描述符指向 stdin(或键盘),第二个描述符指向 stdout(或监视器),第三个描述符指向 stderror。

考虑下面的脚本以进一步理解。

cat 0<old_file.txt 1>new_file.txt # copies old file’s contents to new file

上面的命令读取旧文件的内容并将其复制到新文件中。 请注意我们如何使用描述符 0 来读取和使用描述符 1 来写入。

如果您觉得这个描述符令人困惑,我们为您准备了一些不同的东西。 以下命令也可以使用:

cat <old_file.txt >new_file.txt # copies old file’s contents to new file
cp <old_file.txt >new_file.txt # copies old file’s contents to new file

请注意 ,在上面的第二种方法中,我们使用了复制命令(即 cp)。 它有两个参数:源文件的路径和目标文件的路径。

现在我们已经完成了文件的复制。 在 Vim 中打开新文件并使用以下命令:

vim new_file.txt

现在使用 Shift+Esc 并在 Vim 中键入以下命令:

:1,nd # here n is an integer number e.g., 2

上面的命令删除了 new_file.txt 中的前 n 行。 这里,d代表删除。


使用 sed 跳过前 n 行

创建一个新文件然后删除其内容可能很麻烦。 此外,如果旧文件很大,它也会消耗大量额外的内存。

所以,让我们看一个更简单的方法来实现同样的目的:

sed 1,nd old_file.txt # here n is an integer

重要的是要注意 sed 命令不会修改旧文件。 相反,它只会在删除前 n 行后显示旧文件的内容。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便