sed 替换在终端中有效,但在 SAS 管道中无效

sed substitution works in terminal but not in SAS pipe

如果我在终端运行命令echo abc | sed 's/b/\'$'\n'/,我得到输出:

a
c

但是如果运行以下SAS代码在同一台服务器上,读取完全相同命令的输出,

filename cmd pipe "echo abc | sed 's/b/\'$'\n'/";
data _null_;
  infile cmd;
  input;
  put _infile_;
run;

我在日志中得到了这个:

a$nc

如何使 SAS 管道输出与我在终端中获得的输出相匹配?

更多详情

我在 Solaris 10/SunOS 5.1 上使用 SAS 9.1.3。我使用的 sed 的 Solaris 版本不支持正则表达式中换行符的 \n 转义序列,因此上面命令中的 shell 替换。如果我运行

echo abc | sed s/b/\n/

我得到以下输出(在终端中):

anc

我无法选择使用任何其他版本的 sed。

我已经有一个基于 tr 的解决方案,但如果可能的话,我想找到一种在 sed 中使它工作的方法,这样我就可以用换行符替换较长的字符串。

我不知道 SAS,但这个问题在各种语言中可能非常普遍,即:没有 shell 的语言派生命令,因此无法识别您的管道。您需要将代码更改为 bash -c "echo abc | sed 's/b/\'$'\n'/"。当然,你需要处理引号。