如何在命令中使用文件并将输出重定向到同一文件而不截断它?

2024-04-19 08:05:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 文件name文本事情grep空白file我会
3条回答

改用sed:

sed -i '/seg[0-9]\{1,\}\.[0-9]\{1\}/d' file_name

您不能这样做,因为bash首先处理重定向,然后执行命令。所以当grep查看文件名时,它已经是空的。不过,您可以使用临时文件。

#!/bin/sh
tmpfile=$(mktemp)
grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > ${tmpfile}
cat ${tmpfile} > file_name
rm -f ${tmpfile}

像这样,考虑使用mktemp来创建tmpfile但注意它不是POSIX。

对此类任务使用sponge。它是羊肚菌的一部分。

尝试以下命令:

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

相关问题 更多 >