これを

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
% 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

<div class="section">
    #### 「-n」オプション
    デフォルトではパターンスペースが毎行自動的に出力されますが、このオプションはそれを抑制します。<br/>
pコマンドで明示的に出力しない限り、出力されないようになります。

</div>
<div class="section">
    #### 「-e &#39;1!G;h;$p&#39;」オプション
    「-e」オプションで、sedスクリプトを記述しています。このsedスクリプトはセミコロン区切りです。ここに現れるコマンドの意味は、以下のとおりです。

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

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

<ul>
<li>1行目では「h」コマンドが</li>
<li>2行目以降は「G」コマンドと「h」コマンドが</li>
<li>最終行では「G」コマンドと「h」コマンドと「p」コマンドが</li>
</ul>実行されます。コマンドを日本語に展開すると

<ul>
<li>1行目は、パターンスペース > ホールドスペース</li>
<li>2行目以降は、ホールドスペース >> パターンスペース、パターンスペース > ホールドスペース</li>
<li>最終行は、ホールドスペース >> パターンスペース、パターンスペース > ホールドスペース、パターンスペースを出力</li>
</ul>という流れになります。つまり、「ホールドスペース(退避エリア)の内容をパターンスペースの後ろに追記し、再度ホールドスペースへ退避する」ということをして、後ろへ後ろへ値を追記していっているということのようです。<br/>
sed勉強しよう。<br/>
<br/>


</div>
<div class="section">
    ### 参考URL
    
<ul>
<li><a href="http://hwb.ecc.u-tokyo.ac.jp/current/applications/textprocessing/sed/holdspace/">26.3.5 ホールドスペースの使い方 | HWB</a></li>
<li><a href="http://selfmemo.seesaa.net/article/2881603.html">sed パターンスペースとホールドスペース: 自分メモ</a></li>
<li><a href="http://www.ibm.com/developerworks/jp/linux/library/l-sed3/">共通テーマ: 実例でわかる sed 第 3 回</a></li>
</ul>
</div>