LoginSignup
39
12

More than 5 years have passed since last update.

複数のファイルを終端に改行がなければ改行を追加して結合する

Posted at

SSH の authorized_keys や SSL 証明書でサーバ証明書と中間証明書を結合するとき、単に複数のファイルを結合するなら cat すればいいだけですが、ファイルの終端が改行で終わっていない場合、改行なしでファイルが連結されてしまうことがあります。

例えば server.pem と chain.pem があったとして server.pem の終端が改行で終わっていないと cat server.pem chain.pem

-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----

などとなってしまいます。

cat ではなく awk 1 で連結すれば OK です。

awk 1 server.pem chain.pem
-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----

パイプするときも awk 1 を通せば終端が改行でなければ改行が追加されます。

curl -s http://gitlab.example.com/oreore.keys | awk 1

gitlab から公開鍵を取り出すと改行が無いので割と罠です。


1 は、パターンが 1 という式で、アクションは省略、という意味です。

パターンに式を記述した場合、0 ではない数字、または、空ではない文字列、のときにマッチと評価されるので、1 なら常にマッチします。

アクションが省略された場合は {print} となります。つまり、全行で print が行われます。

awk は最終行は改行が無くても行と認識します、そして print は行を改行付きで表示します。


いつも authorized_keys で awk 1 してるのなんで?と聞かれたのでその理由。

39
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
12