首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用grep进行就地处理

使用grep进行就地处理
EN

Stack Overflow用户
提问于 2010-10-20 23:28:47
回答 8查看 19.9K关注 0票数 34

我有一个脚本调用grep来处理一个文本文件。目前我正在做这样的事情。

代码语言:javascript
复制
$ grep 'SomeRegEx' myfile.txt > myfile.txt.temp
$ mv myfile.txt.temp myfile.txt

我想知道是否有任何方法可以进行就地处理,比如将结果存储到相同的原始文件中,而不必创建临时文件,然后在处理完成后用临时文件替换原始文件。

当然,我欢迎关于为什么应该或不应该这样做的评论,但我主要感兴趣的是它是否可以做到。在本例中,我使用的是grep,但我通常对Unix工具感兴趣。谢谢!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-10-20 23:55:34

Perl有-i开关,sedRuby也有

代码语言:javascript
复制
sed -i.bak -n '/SomeRegex/p' file

ruby -i.bak -ne 'print if /SomeRegex/' file

但请注意,它所做的一切都是在后端创建“临时”文件,这是你认为你看不到的,仅此而已。

除了grep之外的其他方式

awk

代码语言:javascript
复制
awk '/someRegex/' file > t && mv t file

bash

代码语言:javascript
复制
while read -r line;do case "$line" in *someregex*) echo "$line";;esac;done <file > t && mv t file
票数 17
EN

Stack Overflow用户

发布于 2015-06-28 05:04:04

sponge (在Debian/Ubuntu的moreutils包中)读取输入直到EOF,并将其写入文件,因此您可以grep文件并将其写回自身。

如下所示:

代码语言:javascript
复制
grep 'pattern' file | sponge file
票数 30
EN

Stack Overflow用户

发布于 2010-10-20 23:34:09

一般来说,这是做不到的。但是Perl有-i开关:

代码语言:javascript
复制
perl -i -ne 'print if /SomeRegEx/' myfile.txt

写入-i.bak将导致原始文件保存在myfile.txt.bak中。

(当然,在内部,Perl基本上只是做您已经在做的事情--不涉及任何特殊的魔术。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3979548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档