シェル ヒア・ドキュメント Here Documents 2
LinuxのシェルではTABは補間機能になっているのでうまくいきませんがこういう事例もあります。
$ cat <<- END
> <TAB>This is a
> <space><space>here $DOC.
> END
This is a
here document.
<<のあとにハイフン(-)をつけるとヒア・ドキュメントの部分の行頭のタブ(スペースではありません)は入力されていないものとして処理されます。
入力はヒア・ドキュメントから読み取り、標準出力やエラー出力をファイルにリダイレクトするには
以下のようにします。
command << EOF > stdout 2>stderr
..................
EOF
パイプに渡すことも可能です。
command << EOF | command2
..................
EOF
ヒア・ドキュメントは、キーボードや他のファイルからの入力を必要としません。
シェルプログラムの中であるコマンドに対してきまった操作を行わせることができます。
エディタコマンドに対する入力もできてしまいます。
edコマンドを使っての例です。
edコマンドは、-オプションを指定すると画面にメッセージを出力しません。
シェルプログラムの中で実行するため、余計なメッセージは出さないようオプションをつけて起動します。
次の例では読み込んだファイルをさかさまに並べてみます。
ed - file <<- !
g/^/m0
w
1
!
edでfileというファイルをオープンします。
次の!の行までがヒア・ドキュメントの部分です。
キーボードから行う入力と同じことを書き込みます。
<<のあとには任意の文字を書けますので前回ではEOFとしていました。ここでは!にしています。
g/^/m0
の意味は、最初のgでこのファイルの中で一致するパターンを探します。
何に一致するものを探すかという指定が、この直後に続く /で囲まれた文字列です。
そこには ^ があります。これは行頭を表します。
よってファイルの中の全部の行に対して処理をすることになります。
次にm0は0行目に移動しないさいという意味です。
そのファイルの先頭に移動させることを意味します。
すべての行に一致するので最初は一行目です。この行をファイルの最初に移動させます。
次に2行目です。これをまたファイルの最初にもっていきます。これを順にファイルの最後までを繰り返していけば行が全部さかさまになります。
最終行が最初の行に移動した時点で、このコマンドは終わります。
次のwコマンドで上書き保存します。
さらに、qコマンドでedコマンドを終了します。
!ヒア・ドキュメントが終了します。
実例です。testdocを用意します。中身はこのようになっています。
[root@localhost sh]# cat testdoc
1-Line
2-Line
3-Line
4-LIne
実行します。
[root@localhost sh]# ed - testdoc <<- !
> g/^/m0
> w
> 1
> !
4-LIne
逆に並べ替えられました。
[root@localhost sh]# cat testdoc
4-LIne
3-Line
2-Line
1-Line
プログラムの中で画面に表示する必要はないのでviよりexを選択することになります。
viのビジュアル機能を削ったのがexになります。
シェルスクリプトの中でedやexといったエディタを起動し、ファイルを編集できるのは非常に有用です。
ヒア・ドキュメントの利用の真骨頂です。正規表現を駆使して操作の幅を広げることが可能です。
テーマ:UNIX/Linux - ジャンル:コンピュータ
★CentOS7 まとめ
★Ubuntu14 まとめ
★Ubuntu12用無線アダプタ紹介
★Ubuntu12 まとめ
★Server 2008R2 まとめ
★SCCM2012R2 まとめ
★Windows10 アップグレード
★Windows7 まとめ
★Windows7 SSD まとめ
★Windows8 まとめ
★EaseUS Todo Backup Server
★Linux Destbision まとめ
★Linuxコマンド関連Index
★Zorin8.1まとめ
★Fedora17まとめ
★Fedora15まとめ
☆VB Script まとめ
★USB3.0で快適バックアップ
★リンク集・メール
・はじめての自宅サーバ構築 - Fedora/CentOS -
SCCM Backup 遠隔操作 VirtualBox FeliCaポート/パソリ ESXi
<%plugin_third_description>
<%plugin_third_content><%plugin_third_description2>