44

私はシェルスクリプトを初めて使用し、SED を使用して各行から改行文字を削除しようとしています。これは私がこれまでに行ったことです:

printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g'

Ist 改行文字のみを削除します。私はどこかでこのコマンドを見つけました:

printf "{new\nto\nlinux}" | sed ':a;N;$!ba;s/\n/ /g'

しかし、それは :「ba: イベントが見つかりません。」

私が行った場合:

printf "{new\nto\nlinux}" | sed ':a;N;s/\n/ /g' | sed ':a;N;s/\n/ /g'

その後、正しい出力が得られますが、スクリプトを実行したときに新しい文字がいくつ得られるかわからないため、より良いものを探しています。着信ストリームは、echo または printf またはスクリプト内の変数からのものです。前もって感謝します

4

3 に答える 3

99

改行を削除するには、tr を使用します。

tr -d '\n'

各改行を単一のスペースに置き換えたい場合:

tr '\n' ' '

エラーba: Event not foundは csh から来ており、csh が!ba履歴リストで照合しようとしていることが原因です。をエスケープし!てコマンドを書くことができます:

sed ':a;N;$\!ba;s/\n/ /g'  # Suitable for csh only!!

しかし、sed はこれには不適切なツールであり、引用符で囲まれた文字列をより合理的に処理するシェルを使用する方がよいでしょう。つまり、csh の使用をやめて、bash の使用を開始します。

于 2012-05-16T12:45:49.387 に答える
6

これはあなたのために働くかもしれません:

printf "{new\nto\nlinux}" | paste -sd' '            
{new to linux}

また:

printf "{new\nto\nlinux}" | tr '\n' ' '            
{new to linux}

また:

printf "{new\nto\nlinux}" |sed -e ':a' -e '$!{' -e 'N' -e 'ba' -e '}' -e 's/\n/ /g'
{new to linux}
于 2012-05-16T12:59:48.470 に答える