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
派生行エディタ):sed
grep
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
。