答え1
これにより、ファイルが1行ずつ反転されます。
sed '1!G;h;$!d'文書
sed
まず、スペアスペースそしてパターン空間。特定のコマンドに焦点を当てる前に、まず2つのコマンドを区別する必要があります。
新しい行を読み取ると、sed
パターン空間にロードされます。したがって、新しい行が処理されるたびにそのスペースが上書きされます。一方、予約されたスペースは処理全体で一貫しており、後で使用するために値を保存できます。
コマンドへ:
1!G
このステートメントには、h
および 3 つのコマンドがあります。$!d
1!G
G
これは、コマンドが最初の行(負!
)を除くすべての行で実行されることを意味します1
。G
引用する追加予約済みスペースの内容をパターンスペースに入れます。h
すべての行に適用されます。それコピースペースを予約済みスペースにパターン化して上書きします。$!d
最後の行を除くすべての行に適用されます($
最後の行を意味し、!
これを無効にします)。d
ライン(パターン空間)を突き抜けていくという命令です。
- 最初の行を読むとコマンドが
sed
実行されますh
。最初の行は予約済みスペースにコピーされます。その後、$!
基準を満たしているため削除されました。sed
2行目に進みます。 - 2行目は条件と一致するため
1!
(最初の行ではない)、予約済みスペース(1行目がある)がパターンスペース(2行目)に追加されます。その後、パターン空間には2行目があり、その後に最初の行があり、改行文字で区切られます。これでh
コマンドが適用されます(すべての行と同様)。パターンスペースのすべての内容が予約済みスペースにコピーされます。 3番目の説明($!d
)が適用されます。行がパターン空間から削除されます。 - これで、すべての行がステップ2を完了しました。最後の行に進みます。
- 最後の行(
$
)では、削除部分(d
)を除いて、2つのステップがほぼすべて完了しました。sed
、なしで呼び出されると、-n
各入力行の処理の終わりにパターンスペースが自動的に印刷されます。そのため、削除しないとパターンスペースが印刷されます。これで、次のすべての行が含まれます。逆順で。