为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2019-06-20 15:41:00
如何在不截断文件的情况下使用命令中的文件并将输出重定向到同一个文件?基本上,我想将文件中的文本作为输入,从该文件中删除一行,并将输出发送回同一个文件。如果这能让事情变得更清楚的话。grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > file_name但是,当我这样做时,我会得到一个空白文件。有什么想法吗?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您不能这样做,因为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。


查看完整回答
反对 回复 2019-06-20
?
倚天杖

TA贡献1828条经验 获得超3个赞

使用海量完成这样的任务。它是多功能的一部分。

尝试以下命令:

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


查看完整回答
反对 回复 2019-06-20
?
守候你守候我

TA贡献1802条经验 获得超10个赞

改为使用sed:

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


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 496 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信