
次のファイルがあります。
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
とても簡単です。以下を行う必要があります。
- テキストを16進数に変換
- 0a24(改行と$)を2024(スペースと$)に置き換える
- もう一度テキストに変換してください。
この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'
awk
sed
パターンをパターンとして検索してspace+number
置換しながら、出力フィールド区切り文字を空白に設定して列を行に変更しますnewline+number
。