Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題5

問題5 設定ファイルからの情報抽出

問題のファイルは

https://github.com/shellgei/shellgei160

からダウンロードできる。

ファイルntp.confのpoolの項目からサーバ名を抽出する問題だった。簡単そうだと思ったがサーバ名を抽出する段階で沼にはまってしまった。

シェル・ワンライナー160本ノックの本とは異なる解答だが次のコマンドを実行すれば抜き出せる。

grep -A 1 '^pool' ntp.conf | sed 's/^pool //' | awk '{print $1}'

$1で一列目の文字列を抜き出せる($nでn列目の文字列を抜き出せる)ということを思い出せなかったせいで最初、サーバ名を抜き出せるような正規表現を必死こいて考えていた。ブログを書く段階になってやっと思いついたので以下に記しておく。

cat ntp.conf | grep -A 1 '^pool' | grep -o -A 1 -E ' .*(\..*)* ' | sed 's/^ //'

正規表現でサーバ名をうまくひっかけた後に先頭のスペースを削除している。別にスペースを削除しなくてもいい気がしたがなんとなく書いてみた。