在 Bash 中跳过前 X 行后打印文件
假设你有一个文件,一个很大的文件,你想显示它的内容。 你会怎么做?
您显然不希望打印出文件的全部内容,因为这不太实用。 您可能想要打印一些选择性的行; 也许你会使用正则表达式来解析文件并只打印匹配项。
本文将解释几种方法。
使用 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 行后显示旧文件的内容。
相关文章
在 Bash 中运行 find -exec 命令
发布时间:2024/03/14 浏览次数:127 分类:操作系统
-
本文将演示如何使用 find 命令的 -exec 参数来使用 find 命令定位文件中的任何文本。