使用 sed 对 bash 中的变量进行文本处理未给出预期(修改后的)输出?

使用 sed 对 bash 中的变量进行文本处理未给出预期(修改后的)输出?

我们正在使用一些过时的编码脚本,不允许对其进行修改。因此我想到了一个使用 sed 自动修改输入的解决方案。这不起作用,在深入论坛后我想出了下面的“解决方案”,但它不起作用。该输出或输出未按预期修改。

我想实现什么目标?

有两种输入(所以我需要两个单独的规则/脚本)。一种是每四 (4) 个字符之间加一个减号,另一种是每六 (6) 个字符之间加一个减号。

示例 1 输入:

0HU1L1LQXRFF2W8146LXX5WL

需要格式化为:

0HU1-L1LQ-XRFF-2W81-46XX-L5WL

示例2输入:

C00W00M9JN0777XT06XJHFGCM7Y195

需要格式化为:

C00W00-M9JN07-77XT06-XJHFGC-M7Y195

基于上述,我将需要两个单独的规则,这对我来说不是问题。

那么到目前为止我已经尝试过什么?

在这里和其他论坛上进行挖掘后,我发现以下命令适用于这两种情况:

例如1:

echo "0HU1L1LQXRFF2W8146LXX5WL" | fold -w4 | paste -sd'-' -
Result: 0HU1-L1LQ-XRFF-2W81-46XX-L5WL

完美的!

例如2:

echo "C00W00M9JN0777XT06XJHFGCM7Y195" | fold -w6 | paste -sd'-' -
Result: C00W00-M9JN07-77XT06-XJHFGC-M7Y195

也很完美!

然而...

我很难将其转换为基于变量的 bash 脚本。我尝试了以下方法:

#!/bin/sh
example=C00W00M9JN0777XT06XJHFGCM7Y195
echo "Unedited:"
echo $example
echo " "
echo "Modified:"
stripped=($example | fold -w6 | paste -sd'-' -)
echo $stripped

通过上述内容,我收到以下错误: 意外标记“|”附近的语法错误

所以我通过转义“|”来修改它像这样:

example=C00W00M9JN0777XT06XJHFGCM7Y195
echo "Unedited:"
echo $example
echo " "
echo "Modified:"
stripped=($example \| fold -w6 \| paste -sd'-' -)
echo $stripped

我没有收到上述任何错误,但它没有按预期工作。两个结果是相同的,或者说 $stripped 之间没有减号 (-) 更好。

也许有人可以好心地告诉我我在这里做错了什么以及如何解决这个问题?

作为记录;我不需要在 4 和 6 个字符之间添加减号 (-) 的“组合”脚本。只要其中之一,我就会将其翻译为另一个明显的。

预先感谢您。

答案1

在您的测试中,您过去常常echo将值发送到标准输出,然后发送到管道,但您将其留在了脚本中。您还需要额外的内容$来使其成为命令替换。

stripped=$(echo $example | fold -w6 | paste -sd'-' -)

将给出所需的结果。

相关内容