特定のパターンの前の行から改行文字を削除するには?

特定のパターンの前の行から改行文字を削除するには?

次のファイルがあります。

1
22
1
4
$3
3
5556
$33
$233
$1
5

$改行文字を空白に置き換え、改行で始まるすべての行を前の行に移動したいと思います。私の結果は次のようになります。

1
22
1
4 $3
3
5556 $33 $233 $1
5

sedまたはを使用してgrepこれをどのように実行できますかawk

答え1

同様の質問がここに投稿されました。テキストファイル形式を指定するSEDコマンド

Stéphaneのコメントからわかるように、問題の解決策sedは次のとおりです。

sed -e :a -e '$!N;s/\n\$/ $/;ta' -e 'P;D' filename

答え2

とても簡単です。以下を行う必要があります。

  1. テキストを16進数に変換
  2. 0a24(改行と$)を2024(スペースと$)に置き換える
  3. もう一度テキストに変換してください。

この1行のコードでは、ファイルを「file」と呼びます。

# xxd -ps file|tr -d "\n"|sed s/0a24/2024/g|xxd -r -ps
1
22
1
4 $3
3
5556 $33 $233 $1
5

答え3

$ vi file
:g/^\$/-1j
:x

:joinつまり、ドル記号の行の前の行に1行を作成し、保存して終了します。

答え4

この試み:

awk 'BEGIN {ORS = " "} {print}' file | sed 's/\( \)\([0-9]\)/\n\2/g'

awksedパターンをパターンとして検索してspace+number置換しながら、出力フィールド区切り文字を空白に設定して列を行に変更しますnewline+number

関連情報