ed(1) 将 ^M 添加到文件的每一行

ed(1) 将 ^M 添加到文件的每一行

我正在致力于自动化 WordPress 安装。在编辑 wp-config.php 文件时,我需要put your unique phrase here用 WordPress.org 服务器生成的 Salt 替换包含的 8 行。

所以,我使用了来自的最佳答案这个踏板它告诉我运行这个脚本:

#!/bin/sh

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/)
STRING='put your unique phrase here'
printf '%s\n' "g/$STRING/d" a "$SALT" . w | ed -s wp-config.php

这工作得很好,因为它用适当的盐替换了所需的行。但是,它还会^M在 wp-config.php 中每个字符串的末尾附加一个 ,新添加的字符串除外。

现在看起来像这样:

 */^M
^M
define('AUTH_KEY',         '|%)Y1>vzXGRbE?`FFZX3Mq|ur?tN/,R&%@)juSc?f@bNPYm~P=aF&Fl?!HGF4V}a');
define('NONCE_SALT',       '6;KHO6=[<daU7t|]dA`Ta-h7.2B@3Sa`daIinz/6!O=GQWE(@r(<3L+X,/:[du%Q');
/**
**/^M
^M
/**^M
 * WordPress Database Table prefix.^M

我对 ed(1) 不太了解,所以任何帮助将不胜感激。

答案1

您在问题中提到的一系列命令不会将回车符(事物^M)添加到您的文本文件中。

但是,如果文件在每行末尾已经有回车符,所有 DOS 文本文件都有,那么它会向文件添加非 DOS 行,这意味着文本文件在编辑后有一些行一些是 Unix 文本行,一些是 DOS 文本行。无论您使用什么编辑器查看该文件,都必须尝试弄清楚如何处理该文件,并决定将其显示为 Unix 文本文件,并将回车符显示为^M(vim例如,将执行此操作)。

dos2unix解决方案是在您的文件上运行wp-config.php。它将能够处理混合类型的行并将整个文件转换为 Unix 文本文件。

另请注意,ed编辑脚本不会干净地put your unique phrase here替换文档中的字符串。鉴于该文件

000
AAA
put your unique phrase here
BBB
XXX

...命令序列将生成

000
AAA
BBB
define('AUTH_KEY',...
...
XXX

BBB(注意前后线的位置)。要解决此问题,以便在上面的文本define之前添加行,请将命令更改为命令,即BBBai在当前行之前插入而不是追加到后面(“当前行”将是该BBB行,因为该行位于g//d命令已修改的行之后)。

相关内容