用于替换换行符的sed命令在solaris中不起作用,但在linux中工作

时间:2014-03-05 06:01:54

标签: linux bash unix sed solaris

我有以下sed命令在linux框中工作。但同样不适用于solaris盒子。请纠正我的问题是什么?

a=`sed ':a;N;$!ba;s/\n/ /g' file.txt`

抛出,

-bash-3.00$ a=`sed ':a;N;$!ba;s/\n/ /g' file.txt`
Label too long: :a;N;$!ba;s/\n/ /g

2 个答案:

答案 0 :(得分:2)

sedsolaris,您必须将其分解为:

sed -e ':a' -e 'N;$!ba' -e 's/\n/ /g' file.txt

根据man页面:

b label  Branch to the : command bearing the label.
             If label is empty, branch to the end of
             the script.  Labels are recognized unique
             up to eight characters.

由于他们最多可识别八个字符,因此如果您的标签比您需要在多个表达式中拆分sed所需的标签短。

答案 1 :(得分:1)

在原版sed中,我认为标签本身必须在一条线上。从我非常古老的sed & awk Nutshell书中可以看出:

标签是任何最多七个字符的序列。标签单独放在一行,以冒号开头:

  

:label

这意味着,您需要使用多个-e参数将其与脚本的其余部分分开,或者查看Solaris框上是否有nawkgawk。或者,因为它似乎只是想用空格替换所有换行符,所以有更好的工作工具,例如tr,翻译实用程序,它应该至少无处不在sed

a=`tr '\n' ' ' <file.txt`