gpt4 book ai didi

linux - 在深度 2 编辑所有文件

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:21 25 4
gpt4 key购买 nike

我想对某个文件层次结构中深度为 2 的名为“game.ml”的每个文件执行编辑。我的想法是写

find myfiles -depth 2 -type f -name "game.ml" -exec sed -e 's/size = 5/size = 6/'  '{}' > game2.ml  \;

然后再次返回目录,将所有“game2.ml”文件移回game.ml,覆盖原来的文件。真的,我想要的是一种“self-sed”操作,但我不知道有一个。

坏消息是上面的find 命令没有将game2.ml 放到game.ml 所在的目录中,但是到调用 find 的目录中。

有人可以建议解决这个特定问题的方法,或者更好的方法来完成整个任务吗?两者都会让我开心。

最佳答案

你可以不用find,用shell模式myfiles/*/game.ml找到你想要的所有文件。

与使用 sed 相比,使用 perl 可以更轻松地就地编辑它们:

perl -p -i.bak -e 's/size = 5/size = 6/' myfiles/*/game.ml

-p 标志将每个输入行打印到输出文件(在计算表达式之后)。 -i.bak 就地编辑每个文件,使用 .bak 扩展名保存原始文件(因此,game.ml.bak)。 -e 标志在每个文件的每一行上执行以下表达式。

如果你真的想用 sed 来做:

for f in myfiles/*/game.ml; do
sed 's/size = 5/size = 6/' < "$f" > "$f".new && mv "$f".new "$f"
done

关于linux - 在深度 2 编辑所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com