如果我在终端上运行命令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。我正在使用的Solaris版本的sed不支持正则表达式中换行符的\ n转义序列,因此上面命令中的shell替换。如果我跑
echo abc | sed s/b/\n/
我得到以下输出(在终端中):
anc
我没有选择使用任何其他版本的sed。
我已经有一个基于tr
的解决方案了,但是如果可能的话,我想找到一种方法在sed中使用,这样我就可以用换行符替换更长的字符串。
答案 0 :(得分:4)
我不知道SAS,但问题可能在各种语言中非常普遍,即:没有shell的语言fork命令,因此无法识别您的管道。您需要将代码更改为bash -c "echo abc | sed 's/b/\'$'\n'/"
。当然,你需要处理报价。