bash - Sed - 用充满奇怪字符的变量替换字符串

标签 bash variables unix sed escaping

我正在使用 sed 将文件中的字符替换为变量。该变量基本上是读取文件或网页的内容,其中包含多个类似散列的字符串,如下所示,这些字符串是随机生成的:

define('AUTH_KEY',         'CVo|BO;Qt1B|+GE}+h2/yU7h=5`/wRV{>%h.b_;s%S8-p|>qpf]|/Vf@`&[g~*:&');
define('SECURE_AUTH_KEY',  '{G2-<^jWRd7]2,?]6hhM^*asg.2C.+k=gf33-m+ZK_{Mt|q*<ELF4|gPjyxtTh!)');
define('LOGGED_IN_KEY',    'jSNo9Z;5d]tzZoh-QQ`{M-&~y??$R({:*m`0={67=+mF?L.e+R{;)+4}qCAAHz=C');
define('NONCE_KEY',        '19Vt4=%8j/Z-&~ni0S<]9)J^~sy9dh|h9M_RX2#K0]F9+.v+[BP1d&B&}-FTKIJ,');
define('AUTH_SALT',        'jr7f?T|@Cbo]XVAo}N^ilkvD>dC-rr]5{al64|?_Hz }JG$yEi:_aU )Olp YAD+');
define('SECURE_AUTH_SALT', 'hm#Z%O!X_mr?lM|>>~r-?F%wi R($}|9R[):4^NTsj+gS[qnv}7|+0<9e-$DJjju');
define('LOGGED_IN_SALT',   'tyPHBOCkXZh_4H;G|^.&|^#JPB/f;{}y_Orj!6AH?@wovx+KKtTZ A[HMS9SZJ|N');
define('NONCE_SALT',       'Eb-/t 5D-vPV9I--8F<[^lcherGv.g+|7p6;+xP|5g6P}tup1K.vuHAQ=uWZ#}H^');

变量定义如下:

KEY=$(cat keyfile)

我使用了以下 sed 语法:

sed -i "s/stringtoreplace/$KEY/" /path/to/file

我还尝试了不同的变体,使用单引号、变量周围的引号

sed -i "s/stringtoreplace/"$KEY"/" /path/to/file

sed -i "s/stringtoreplace/"${KEY}"/" /path/to/file

sed -i "s/stringtoreplace/'$KEY'/" /path/to/file

我认为我“暴力”地使用了各种可能的方式来添加引号,并且我不知道如何转义此类随机生成的字符。我不断收到以下错误:

unterminated s command

关于如何用奇怪的散列变量替换字符串有什么建议吗?

最佳答案

sed 是一个出色的工具,可以在单行上进行简单替换,但对于其他任何事情,您应该使用 awk:

awk -v key="$KEY" '{sub(/stringtoreplace/,key)}1' file

无论“$KEY”包含什么字符(“&”除外),该方法都有效。

关于bash - Sed - 用充满奇怪字符的变量替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535046/

相关文章:

regex - Grep 特定长度的字符

javascript - 使用字符串值javascript设置样式

unix - zcat 无法正确解压缩文件

linux匹配行号之后的模式直到结束并替换一次

regex - 查找文件中每个出现的正则表达式

linux - 如何在 Linux bash 中提取带条件的 csv 文件的第 n 列?

regex - 多个文件上的 Linux shell

C# 说我在不打算声明变量的时候声明了变量

bash - 在 Windows 7 的 cygwin 中运行 bash 脚本

c++ how-to : import numeric variables from . txt 或 .csv 文件