Unix 从具有特定扩展名的所有文件中删除最后一行

Unix 从具有特定扩展名的所有文件中删除最后一行,unix,awk,sed,find,file-processing,Unix,Awk,Sed,Find,File Processing,我在一个目录中有几个扩展名相同的.txt文件。我想从所有.txt文件中删除最后一行 我所做的是 找到-类型f-名称'*.txt'-exec sed'$d'{}\ 这会将每个.txt文件的所需输出从sed打印到终端 我想要的是修改相应的文件。您应该使用-I with sed语句 要修改和更改文件,我们需要在sed命令中指定-i 你的命令应该是 find . -type f -name '*.txt' -exec sed -i '$d' {} \; 但请注意,它将用.txt更新所有文件,您将无法恢

我在一个目录中有几个扩展名相同的.txt文件。我想从所有.txt文件中删除最后一行

我所做的是

找到-类型f-名称'*.txt'-exec sed'$d'{}\

这会将每个.txt文件的所需输出从sed打印到终端


我想要的是修改相应的文件。

您应该使用-I with sed语句

要修改和更改文件,我们需要在sed命令中指定-i

你的命令应该是

find . -type f -name '*.txt' -exec sed -i '$d' {} \;
但请注意,它将用.txt更新所有文件,您将无法恢复,因此请备份重要文件,尝试以下操作:-

sed  -i '$d' *.txt
$用作行号,表示文件中的最后一行

d为美元,在本例中删除相应的最后一行


*.txt用于选择当前目录中扩展名为.txt的所有文件。

考虑到使用sed修改大量文件时丢失数据的风险,正如@williampersell所指出的,这是我在创建新子目录后使用的:

awk'NR>1{print last>/modified/FILENAME}{last=$0}'*.txt

这会将所有扩展名为.txt的文件过滤到新文件中,并更改名为modified的子目录

请参阅@williampersell对以下问题的回答


不,你真的不想那样做。如果您的sed支持这种暴行,您可能可以使用sed-i,但您确实不想这样做。创建一个新目录。使用更改将文件过滤到新目录中的新文件中。尝试使用sed-i手动上传大量文件将在大部分时间内正常工作。但它会在最糟糕的时刻失败并导致数据丢失。@williampersell感谢您的回答和警告。这对我有用。干杯请在您的回答中描述问题所在,以及这段代码将如何解决问题,以帮助其他人理解这一点answer@FZs若我是正确的,那个么用户希望删除特定目录中所有扩展名为.txt的文件的最后一行,而这个命令足以做到这一点。。。你可以随时编辑它!我不知道你是否正确,我已经在评论队列中看到了这篇文章。谢谢你提供的这段代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。