SSH批量替换配置文件中txpcfg用户值的命令咨询
批量替换配置文件中用户名信息的SSH命令
没问题,这事儿用sed配合find就能轻松搞定——这是服务器上批量修改文本内容的经典组合。下面分两种常见场景给你具体命令:
场景1:递归修改当前目录及所有子目录下的所有文件
如果你想修改所有类型的文件(不管后缀),可以用这条命令:
find . -type f -exec sed -i 's/$txpcfg\['\''user'\''\] = '\''EXAMPLE-1'\'';/$txpcfg\['\''user'\''\] = '\''EXAMPLE-2'\'';/g' {} +
命令拆解:
find . -type f:从当前目录(.)开始,遍历所有普通文件(排除目录、链接等)-exec sed ... {} +:把找到的文件批量传给sed命令处理sed -i:-i参数表示直接修改原文件(原地编辑)s/原字符串/新字符串/g:这是sed的替换语法,g表示全局替换(如果一行里出现多次目标内容,全部替换)- 为什么要加这么多转义符?因为原字符串里的
[是sed的特殊字符,需要用\[转义;而单引号在shell环境里需要用'\''来转义,确保shell能正确解析整个表达式。
场景2:只修改特定类型的配置文件
从你的示例字符串看,这应该是PHP配置文件,所以可以只针对.php文件修改,避免误改其他无关文件:
find . -type f -name "*.php" -exec sed -i 's/$txpcfg\['\''user'\''\] = '\''EXAMPLE-1'\'';/$txpcfg\['\''user'\''\] = '\''EXAMPLE-2'\'';/g' {} +
这里的-name "*.php"就是过滤条件,只匹配后缀为.php的文件。
重要提醒(必看!)
- 先预览再修改:执行修改命令前,建议先去掉
-i参数,预览替换效果,确认没问题再执行修改:
find . -type f -name "*.php" -exec sed 's/$txpcfg\['\''user'\''\] = '\''EXAMPLE-1'\'';/$txpcfg\['\''user'\''\] = '\''EXAMPLE-2'\'';/g' {} +
- 自动备份原文件:如果担心误操作,可以让
sed自动生成备份文件(比如原文件是config.php,会生成config.php.bak),只需要把-i改成-i.bak:
find . -type f -name "*.php" -exec sed -i.bak 's/$txpcfg\['\''user'\''\] = '\''EXAMPLE-1'\'';/$txpcfg\['\''user'\''\] = '\''EXAMPLE-2'\'';/g' {} +
确认修改无误后,可用这条命令删除所有备份文件:
find . -name "*.bak" -delete
内容的提问来源于stack exchange,提问作者Miles
相关产品推荐
相关产品推荐

