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'/"
。当然,你需要处理引号。
如果我在终端运行命令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'/"
。当然,你需要处理引号。