Mac环境下递归批量替换文件中指定字符串的问题求助
批量替换文件内容问题解决
问题根源
你之前的命令没生效,核心原因是指定了只处理*.txt文件,但实际要修改的是Jenkinsfile和.jenkinsfile类型的文件,过滤条件不匹配,导致根本没找到目标文件,自然不会有任何修改。
正确执行命令
针对Linux(GNU sed)
如果只想处理Jenkins相关配置文件,用这个命令:
find . -type f \( -name "Jenkinsfile" -o -name "*.jenkinsfile" \) -exec sed -i 's/product-ui-test-creds.json/vaulted-product-ui-test-creds.json/g' {} +
要是需要处理当前目录及子目录下所有文本文件(不限后缀),可以用:
find . -type f -exec sed -i 's/product-ui-test-creds.json/vaulted-product-ui-test-creds.json/g' {} +
针对macOS(BSD sed)
macOS自带的sed需要在-i后加空字符串来指定无备份(如果需要备份文件,把空字符串换成备份后缀,比如-i .bak):
# 仅处理Jenkins相关文件 find . -type f \( -name "Jenkinsfile" -o -name "*.jenkinsfile" \) -exec sed -i '' 's/product-ui-test-creds.json/vaulted-product-ui-test-creds.json/g' {} +
处理所有文本文件:
find . -type f -exec sed -i '' 's/product-ui-test-creds.json/vaulted-product-ui-test-creds.json/g' {} +
验证替换效果
替换完成后,执行以下命令确认结果:
grep -r "vaulted-product-ui-test-creds.json" .
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

