Contents

删除文件的最后一个字符

1. 概述

在本教程中,我们将学习如何删除文件中的最后一个字符。虽然问题看起来很简单,但有几点需要牢记。我们将研究解决这个问题的多种方法。

2. 示例文件

让我们看看我们将使用的示例文件的内容。我们可以使用cat 命令来做到这一点:

$ cat sample.txt
This is a file
This file has two lines

我们的示例文件sample.txt有两行文本。

3. 删除文件的最后一个字符

现在让我们看一下删除文件最后一个字符问题的几个突出解决方案:

3.1.使用sed命令

命令sed 执行文件操作,如插入、删除、搜索、查找和替换。

让我们看看如何使用sed删除文件中的最后一个字符:

$ sed '$ s/.$//' sample.txt
This is a file
This file has two line

上面的 sed命令利用正则表达式替换来删除文件的最后一个字符。在这里,“。” (点)  指的是任何字符,*$指向文件中的最后一行。因此.$*仅斜杠最后一个字符。

s/.$//函数调用在文件的最后一行执行。它将最后一个字符s替换为空字符串。这样,它就完全脱掉了文件的最后一个字符。

命令sed从读取整个文件开始。所以这种方法对于大文件需要很多时间。

上述sed命令不会修改实际文件。

sed命令中的选项*-i修改了实际的sample.txt*文件:

$ sed -i '$ s/.$//' sample.txt
$ cat sample.txt
This is a file
This file has two line

但是,如果实际文件是symlink ,则上述命令不起作用。

sed命令通常用于删除字符,因为它默认安装在每个Linux系统中。

3.2. 使用truncate命令

命令truncate 将文件收缩或扩展为给定大小。

我们可以使用它来删除文件中的最后一个字符:

$ truncate -s -1 sample.txt 
$ cat sample.txt
This is a file
This file has two line

带有选项*-s -1truncate命令通过删除文件末尾的最后一个字符**s*来将文件大小减小一倍。

命令truncate只需要很少的时间,即使是处理大文件也是如此。

3.3. 使用ex命令

命令*ex 指向Linux文本编辑器。ex表示扩展。 让我们看看如何使用ex*删除文件中的最后一个字符:

$ printf '%s\n' '$' 's/.$//' wq | ex sample.txt
$ cat sample.txt
This is a file
This file has two line

命令printf 以%s字符串格式说明符输出文件的内容。\n是在新行中打印的转义序列。

在这里,“。” (点)  表示任何字符,*$表示文件中的最后一行。因此.$*仅删除最后一个字符。

s/.$//函数调用被应用到文件的最后一行。它将最后一个字符s替换为空字符串。这样,它会删除文件的最后一个字符。

命令wq 保存并退出文本编辑器。

命令ex更新文件sample.txt

3.4. 使用awk命令

命令*awk *执行文本处理和数据提取。

让我们看看如何使用awk删除文件中的最后一个字符:

$awk '{a[NR]=$0} END {for (j=1; j<NR; j++) print a[j];sub(/.$/,"",a[NR]);print a[NR]}' sample.txt
This is a file
This file has two line

在这里,NR 是awk中的内置变量。它保存sample.txt文件中正在处理的记录总数。

函数sub 是awk中的内置字符串函数。它将最后一个字符s替换为空字符串  “”。“ 。” (点)  指的是任何字符,*$*指定文件中的最后一行。

因此,上面的awk命令将整个文件内容保存在一个数组中。然后删除文件最后一行的最后一个字符。最后,它在控制台上打印它。