使用 SSH 传输时更改文件中的特定行

使用 SSH 传输时更改文件中的特定行

我正在使用scp命令将我的项目部署到生产服务器。作为部署过程的一部分,我将.htaccess文件上传到服务器。在本地,环境设置为DEVELOPMENT

#Set environment
#[PRODUCTION, STAGING, TESTING, DEVELOPMENT] 

SetEnv KOHANA_ENV 'DEVELOPMENT'

但是,上传到服务器时需要将其更改为PRODUCTION。有什么方法可以用 ssh 来实现吗?

答案1

您可以使用sed命令和-i标志来编辑文件:

sed -i "s/SetEnv KOHANA_ENV 'DEVELOPMENT'/SetEnv KOHANA_ENV 'PRODUCTION'/g" /path/to/.htaccess

通过ssh我会看起来像这样:

ssh user@host "sed -i \"s/SetEnv KOHANA_ENV 'DEVELOPMENT'/SetEnv KOHANA_ENV 'PRODUCTION'/g\" /path/to/.htaccess"

替换sed文件中的字符串非常简单:

sed -i 's/search_string/replace_string/g' file

用 替换所有出现的 ,结果为search_string。导致就地编辑文件,而不是写入标准输出 (stdout)。replace_stringfile-ised

如果您只想替换第一次出现的条目,请使用以下 sed 命令:

sed -i '0,/search_string/s/search_string/replace_string/' file

有关sed使用的更多信息man sed

答案2

您可以直接在本地写入文件,如下所示:

echo "#Set environment
#[PRODUCTION, STAGING, TESTING, DEVELOPMENT] 

SetEnv KOHANA_ENV 'PRODUCTION'" > /path/to/.htaccess

/path/to/记得用路径替换.htaccess,然后使用 scp 复制文件。这将替换文件的内容。

答案3

如果只想转换第 28 行,可以执行以下操作:

sed '28s/DEVELOPMENT/PRODUCTION/' file

(当然可以与 -i 选项结合使用)

如果您想避免修改本地文件,您可以执行以下操作:

< /local/path/to/.htaccess sed '28s/DEVELOPMENT/PRODUCTION/' | ssh user@host "cat > /server/path/to/.htaccess"

相关内容