我有以下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
答案 0 :(得分:2)
在sed
上solaris
,您必须将其分解为:
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框上是否有nawk
或gawk
。或者,因为它似乎只是想用空格替换所有换行符,所以有更好的工作工具,例如tr
,翻译实用程序,它应该至少无处不在sed
:
a=`tr '\n' ' ' <file.txt`