我有一个脚本调用grep来处理一个文本文件。目前我正在做这样的事情。
$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp
$ mv myfile.txt.temp myfile.txt
我想知道是否有任何方法可以进行就地处理,比如将结果存储到相同的原始文件中,而不必创建临时文件,然后在处理完成后用临时文件替换原始文件。
当然,我欢迎关于为什么应该或不应该这样做的评论,但我主要感兴趣的是它是否可以做到。在本例中,我使用的是grep
,但我通常对Unix工具感兴趣。谢谢!
发布于 2010-10-20 23:55:34
Perl有-i
开关,sed
和Ruby
也有
sed -i.bak -n '/SomeRegex/p' file
ruby -i.bak -ne 'print if /SomeRegex/' file
但请注意,它所做的一切都是在后端创建“临时”文件,这是你认为你看不到的,仅此而已。
除了grep
之外的其他方式
awk
awk '/someRegex/' file > t && mv t file
bash
while read -r line;do case "$line" in *someregex*) echo "$line";;esac;done <file > t && mv t file
发布于 2015-06-28 05:04:04
sponge
(在Debian/Ubuntu的moreutils
包中)读取输入直到EOF,并将其写入文件,因此您可以grep文件并将其写回自身。
如下所示:
grep 'pattern' file | sponge file
发布于 2010-10-20 23:34:09
一般来说,这是做不到的。但是Perl有-i
开关:
perl -i -ne 'print if /SomeRegEx/' myfile.txt
写入-i.bak
将导致原始文件保存在myfile.txt.bak
中。
(当然,在内部,Perl基本上只是做您已经在做的事情--不涉及任何特殊的魔术。)
https://stackoverflow.com/questions/3979548
复制相似问题