首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更改多个文件

更改多个文件
EN

Stack Overflow用户
提问于 2012-05-04 17:09:53
回答 8查看 236.9K关注 0票数 240

以下命令正在正确更改%2个文件的内容。

代码语言:javascript
复制
sed -i 's/abc/xyz/g' xaa1 xab1 

但我需要做的是动态更改几个这样的文件,而我不知道文件名。我想写一个命令,它将读取当前目录中的所有文件,从xa*开始,sed将更改文件内容。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-05-04 17:32:40

更好的是:

代码语言:javascript
复制
for i in xa*; do
    sed -i 's/asd/dfg/g' $i
done

因为没有人知道那里有多少文件,而且很容易打破命令行限制。

下面是当文件太多时会发生的情况:

代码语言:javascript
复制
# grep -c aaa *
-bash: /bin/grep: Argument list too long
# for i in *; do grep -c aaa $i; done
0
... (output skipped)
#
票数 160
EN

Stack Overflow用户

发布于 2015-06-09 03:46:06

我很惊讶没有人提到要查找的-exec参数,虽然它会为每个匹配的文件名启动一个进程,但它是针对这种用例的:

代码语言:javascript
复制
find . -type f -name 'xa*' -exec sed -i 's/asd/dsg/g' {} \;

或者,可以使用xargs,这将调用更少的进程:

代码语言:javascript
复制
find . -type f -name 'xa*' | xargs sed -i 's/asd/dsg/g'

或者更简单地在find中使用+ exec variant而不是;,以允许find为每个子流程调用提供多个文件:

代码语言:javascript
复制
find . -type f -name 'xa*' -exec sed -i 's/asd/dsg/g' {} +
票数 206
EN

Stack Overflow用户

发布于 2014-03-20 21:41:21

您可以同时使用grep和sed。这允许您以递归方式搜索子目录。

代码语言:javascript
复制
Linux: grep -r -l <old> * | xargs sed -i 's/<old>/<new>/g'
OS X: grep -r -l <old> * | xargs sed -i '' 's/<old>/<new>/g'

For grep:
    -r recursively searches subdirectories 
    -l prints file names that contain matches
For sed:
    -i extension (Note: An argument needs to be provided on OS X)
票数 86
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10445934

复制
相关文章

相似问题

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