awk '/^nameserver/ && !modif { printf("nameserver 127.0.0.1\n"); modif=1 } {print}' testfile.txt
它正在显示输出,但我想将输出写入同一个文件。在我的示例中是testfile.txt
。
发布于 2011-11-05 18:39:41
本质上是不可能的。您需要第二个临时文件,因为您不能读取和覆盖相同的文件。类似于:
awk '(PROGRAM)' testfile.txt > testfile.tmp && mv testfile.tmp testfile.txt
mktemp
程序对于生成唯一的临时文件名非常有用。
有一些技巧可以避免临时文件,但它们主要依赖于缓存和读取缓冲区,对于较大的文件很快就会变得不稳定。
发布于 2015-05-21 02:26:15
从GNU Awk 4.1.0开始,就有了"inplace“扩展,所以你可以这样做:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
要保留原始文件的备份副本,请尝试执行以下操作:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
这可以用来模拟GNU sed -i
特性。
发布于 2014-10-30 18:17:06
您也可以使用moreutils中的sponge
。
例如
awk '!a[$0]++' file|sponge file
删除重复行,并
awk '{$2=10*$2}1' file|sponge file
将第二列乘以10。
https://stackoverflow.com/questions/8019617
复制相似问题