我在linux盒子裏有以下sed命令。但是在solaris盒子裏卻不行。請糾正我的問題是什麼?sed命令來取代換行符在solaris中不起作用,但在linux中工作
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
我在linux盒子裏有以下sed命令。但是在solaris盒子裏卻不行。請糾正我的問題是什麼?sed命令來取代換行符在solaris中不起作用,但在linux中工作
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
隨着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
拆分爲更短。
在原來的sed
中,我認爲一個標籤本身必須在一行上。從我非常古老的sed & awk
果殼書中,它陳述:
標籤是最多七個字符的任何序列。標籤是由本身擺出一副線和一個冒號開始:
:label
這意味着,你需要將其從腳本的其餘部分與多個-e
分隔參數或者看看你您的Solaris機器上有nawk
或gawk
。另外,因爲它似乎你只是想空格替換所有的換行,也有這份工作更好的工具,如tr
的翻譯工具,它應該至少是一樣普及,因爲sed
:
a=`tr '\n' ' ' <file.txt`
我希望它能在linux下工作? – logan
@logan是的,它會。 –