如何在不截断文件的情况下使用命令中的文件并将输出重定向到同一个文件?

如何在不截断文件的情况下使用命令中的文件并将输出重定向到同一个文件?

基本上,我想将文件中的文本作为输入,从该文件中删除一行,并将输出发送回同一个文件。如果这能让事情变得更清楚的话。

grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > file_name

但是,当我这样做时,我会得到一个空白文件。有什么想法吗?


慕后森
浏览 497回答 3
3回答

开心每一天1111

您不能这样做,因为bash首先处理重定向,然后执行命令。因此,当grep查看file_name时,它已经是空的。不过,您可以使用临时文件。#!/bin/shtmpfile=$(mktemp)grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > ${tmpfile}cat ${tmpfile} > file_name rm -f ${tmpfile}像这样,考虑使用mktemp若要创建tmpfile但请注意,这不是POSIX。

倚天杖

使用海量完成这样的任务。它是多功能的一部分。尝试以下命令: grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name | sponge file_name

守候你守候我

改为使用sed:sed -i '/seg[0-9]\{1,\}\.[0-9]\{1\}/d' file_name
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python