用于替换换行符的 sed 命令在 Solaris 中不起作用,但在 Linux 中起作用



我有以下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 框中是否有nawkgawk。或者,由于您似乎只想用空格替换所有换行符,因此有更好的工具来完成这项工作,例如 tr ,翻译实用程序,它至少应该像sed一样无处不在:

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

相关内容

  • 没有找到相关文章

最新更新