読者です 読者をやめる 読者になる 読者になる

くんすとの備忘録

プログラミングや環境設定の覚え書き。

sedを使って標準出力を逆順に変換できるらしい

sed

これを

% jot 10
1
2
3
4
5
6
7
8
9
10

こうして、こうじゃ

% jot 10 | sed -n -e '1!G;h;$p'
10
9
8
7
6
5
4
3
2
1

さて、各オプションを読み解いていきます。

「-n」オプション

デフォルトではパターンスペースが毎行自動的に出力されますが、このオプションはそれを抑制します。
pコマンドで明示的に出力しない限り、出力されないようになります。

「-e '1!G;h;$p'」オプション

「-e」オプションで、sedスクリプトを記述しています。このsedスクリプトはセミコロン区切りです。

ここに現れるコマンドの意味は、以下のとおりです。

h パターンスペースの内容をホールドスペースにコピーします.
G ホールドスペースの内容をパターンスペースの末尾に追加します.
p パターンスペースの内容を出力します.

また、「1!」は「1行目以外」、「$」は「最終行」の意味です。

つまり、

  • 1行目では「h」コマンドが
  • 2行目以降は「G」コマンドと「h」コマンドが
  • 最終行では「G」コマンドと「h」コマンドと「p」コマンドが

実行されます。

コマンドを日本語に展開すると

  • 1行目は、パターンスペース > ホールドスペース
  • 2行目以降は、ホールドスペース >> パターンスペース、パターンスペース > ホールドスペース
  • 最終行は、ホールドスペース >> パターンスペース、パターンスペース > ホールドスペース、パターンスペースを出力

という流れになります。

つまり、「ホールドスペース(退避エリア)の内容をパターンスペースの後ろに追記し、再度ホールドスペースへ退避する」ということをして、後ろへ後ろへ値を追記していっているということのようです。


sed勉強しよう。

広告