特定の行をある場所から別の場所に移動

特定の行をある場所から別の場所に移動

Ubuntu端末を使用していますが、ファイルの特定の行(11番目の場所)を最初の行に移動してから、最終結果を新しいファイルに転送する必要があります。元のファイルには数百行が含まれています。
これまでsedコマンドツールを試してみましたが、目的の効果が得られませんでした。これが私が今まで得たものです:

[mission 09] $ sed -n -e '1p' -e '11p' bonjour > bonjour2

ただし、新しいファイルでは最初の行と11行目のみが表示されます。しかし、新しいファイルが残りの元の行と一緒に希望のリビジョン位置を持つことを望みます。

入力する:

English: Hello 
Turkish: Marhaba 
Italian: Ciao 
German: Hallo 
Spanish: Hola 
Latin: Salve 
Greek: chai-ray 
Welsh: Helo 
Finnish: Hei 
Breton: Demat 
French: Bonjour 

希望の出力

French: Bonjour 
English: Hello 
Turkish: Marhaba 
Italian: Ciao 
German: Hallo 
Spanish: Hola 
Latin: Salve 
Greek: chai-ray 
Welsh: Helo 
Finnish: Hei 
Breton: Demat 

どんな提案がありますか?

ベストアンサー1

使用(およびed派生行エディタ):sedgrep

printf '%s\n' '11m0' 'w bonjour2' 'q' | ed -s bonjour

11m0これにより、ファイルに編集コマンドが適用され、最初の行の前に11行目が移動します。その後、生成された文書がファイルに書き込まれ、bonjour2終了します。

または:

printf '%s\n' '11m0' ',p' 'Q' | ed -s bonjour >bonjour2

...コマンドを使用して特定のファイルに書き込むのではなく、ファイルed全体を標準出力として印刷します。その後、結果は新しいファイル名にリダイレクトされます。この,pコマンド(略称1,$p)は、文書全体を標準出力に出力してQ強制終了します(文書が変更された場合でも)。

文書を所定の場所に変更するには(元のファイルの変更など)、結果をファイル自体に書き換えます。

printf '%s\n' '11m0' 'wq' | ed -s bonjour

上記の変形の1つの実行例:

$ printf '%s\n' '11m0' ',p' 'Q' | ed -s bonjour >bonjour2
$ cat bonjour2
French: Bonjour
English: Hello
Turkish: Marhaba
Italian: Ciao
German: Hallo
Spanish: Hola
Latin: Salve
Greek: chai-ray
Welsh: Helo
Finnish: Hei
Breton: Demat

いつも動いて最後行を一番上に移動するには、代わりに$m0を使用してください11m0。常に文字列で始まる行を移動するには、をFrench:使用します/^French:/m0

おすすめ記事