如何在不创建一个新文件的情况下对文件进行分类并创建一个同名的新文件 |Unix Korn shell.



有一种方法可以对文件进行分类,按某些内容过滤它,然后输出一个同名的新文件?我正在这样做,我得到一个空文件,但是如果我使用不同的文件名创建它就可以工作。我不想创建新文件。

例:

File="My_test_file.txt"
cat ${File} | grep -v "test" > ${File}

以这种方式不起作用,我必须创建另一个文件才能使其工作,如下所示:

File="My_test_file.txt"
cat ${File} | grep -v "test" > ${File}.tmp

知道吗?

有一个名为 moreutils 的包,其中包含用于此目的的工具sponge

grep -v test foo.txt | sponge foo.txt

如果安装工具不是一种选择,您可以实现一个朴素版本,首先将所有数据读入内存,然后最后将其写出:

#!/bin/sh
sponge() (
  var="$(cat; printf x)"
  printf '%s' "${var%x}" > "$1"
)
grep -v test foo.txt | sponge foo.txt

您尝试使用catgrep -v执行的操作可以使用sed -i '/pattern/d'轻松完成,并且还可以内联保存更改:

sed -i.bak '/test/d' "$file"

相关内容

最新更新