sed替代在终端工作但不在SAS管道中工作

时间:2015-07-22 20:44:50

标签: regex sed sas pipe solaris

如果我在终端上运行命令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中使用,这样我就可以用换行符替换更长的字符串。

1 个答案:

答案 0 :(得分:4)

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