sed将openssl配置文件的单引号替换为反斜杠单引号

sed将openssl配置文件的单引号替换为反斜杠单引号,sed,openssl,Sed,Openssl,问题的背景是,我正在尝试将带有单引号的密码短语传递给openssl配置文件的input_password参数 摘自: 使用任何类型的引号都可以转义某些字符 或\字符。将行的最后一个字符设为\a值 字符串可以跨多行分布。此外,序列 \n、 \r\b和\t被识别 我假设单引号可以转义。问题是我很难用sed生成转义单引号 因此,我的意思是,如果从脚本或命令行运行,以下表达式不会产生相同的结果。执行以下命令: cut -d: -f2 "$EMPLOYEE_CREDENTIALS_FILE"| sed -

问题的背景是,我正在尝试将带有单引号的密码短语传递给openssl配置文件的input_password参数

摘自:

使用任何类型的引号都可以转义某些字符 或\字符。将行的最后一个字符设为\a值 字符串可以跨多行分布。此外,序列 \n、 \r\b和\t被识别

我假设单引号可以转义。问题是我很难用sed生成转义单引号

因此,我的意思是,如果从脚本或命令行运行,以下表达式不会产生相同的结果。执行以下命令:

cut -d: -f2 "$EMPLOYEE_CREDENTIALS_FILE"| sed -e "s|'|\\\'|g"
其中“$EMPLOYEE\u CREDENTIALS\u FILE”是一个格式类似

username:password
当我在bash中直接运行此命令时,它会生成我假设openssl.conf可以容忍的输出:

tentacle caravan sovereignty appraisal sass\'s
当我在脚本中运行它时,它只会生成正常的未替换密码短语:

tentacle caravan sovereignty appraisal sass's

我想知道我做错了什么。

我终于解决了这个问题

我现在可以确认openssl配置文件允许转义单引号出现在输入密码字段中。不仅如此,openssl使用的实际密码也没有按照预期的那样被替换。最终用户永远不会知道密码在配置文件中被转义

我在让sed在脚本中工作时遇到了一些麻烦,因为据我所知,双引号使用反斜杠,而不是单引号。另一方面,单引号不使用反斜杠,因此无法解释转义字符。这意味着我不能在单引号中转义单引号

这让我找到了解决办法

 cut -d: -f2 "$EMPLOYEE_CREDENTIALS_FILE"| sed -e "s|'|"'\\\'"'|g" 
这与中的答案相似,但对我的案例不起作用

答案中还列出了需要3个反斜杠的原因:

通过在sed命令周围使用双引号,您无需 担心嵌入的单引号。那你就得担心了 逃逸,因为外壳将吸收一级逃逸


问题似乎很清楚。“我在尝试将带有单引号的密码短语传递到openssl配置文件的input_password参数时遇到问题。”我提出了一个不起作用的解决方案。因此,答案应该是更正命令以允许转义发生,或者提供另一种方法来处理带有单引号的密码短语。我不知道我是否可以更清楚。我“思考”是因为文档没有明确说明单引号是否可以转义:“可以使用任何类型的引号或\字符转义某些字符。通过将行的最后一个字符设为\值字符串可以跨多行分布。此外,序列\n、\r、\b和\t被识别为“取自”。