我有以下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
solaris
sed
你必须像这样分解它:
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.
由于它们最多可以识别 8 个字符,因此如果您的标签短于您需要将sed
拆分为多个表达式。
> 在最初的sed
中,我认为标签必须自己在一条线上。从我非常古老的sed & awk
Nutshell书中,它说:
标签是最多七个字符的任何序列。标签单独放在一行上,并以冒号开头:
:label
这意味着,您需要使用多个-e
参数将其与脚本的其余部分分开,或者查看 Solaris 框中是否有nawk
或gawk
。或者,由于您似乎只想用空格替换所有换行符,因此有更好的工具来完成这项工作,例如 tr
,翻译实用程序,它至少应该像sed
一样无处不在:
a=`tr 'n' ' ' <file.txt`