删除文件的最后一个字符
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 -1的truncate命令通过删除文件末尾的最后一个字符**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命令将整个文件内容保存在一个数组中。然后删除文件最后一行的最后一个字符。最后,它在控制台上打印它。