それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

正規表現あと読みと grep -o の組合せで強い文字列の抜き出しができる

正規表現にはあと読みの条件付きマッチの書式がある。

(?<=:)expression

このあと読みの条件マッチを使うことで、○○のあとの△のような文字をダイレクトに抜き出すことが可能になり、コマンドと組み合わせると非常に強いクカを得ることができる。

正規表現のあと読みをgrep で使うことが出来る。

この名前付きのマッチングをgrep で使うと便利そうなので、調べてみたら 私の使ってるgrep は対応してたので、実例を残すことにした。

grep を使った文字列の抜き出し

grepをつかってマッチした文字列をダイレクトに抜き出すことが出来ます。 その際に、マッチする箇所を限定することが出来て便利です。

grep -Poで抜き出し

たとえば、A のあとに続くIPアドレスが欲しい時

$ dig t.co | \grep -Po "A\s+\d.+$"
A    104.244.42.133
A    104.244.42.5
A    104.244.42.197
A    104.244.42.69

A も含めてIPアドレスが取れてしまう。

これを条件マッチでやると

正規表現を「 lookbehind assertion」(後置参照)に変えることで、きっちりマッチする。

$ dig t.co | \grep -Po "(?<=A\s)\d.+$"
104.244.42.133
104.244.42.5
104.244.42.197
104.244.42.69

lookbehind assertionは、正規表現に〇〇に続く△でこの場合は「Aのあとにある数字から始まる文字列」を指定している。

正規表現の条件で絞っている。

そのため名前付きマッチだとか正規表現の後方参照で $0 を取り出す必要もない。

面倒なことが少し減っている。

他にもこのようなことに使える。

takuya@~$ sudo networksetup  -getairportpower en0
Wi-Fi Power (en0): On

この結果からen0のあとの ONだけを取出したい。

takuya@~$ sudo networksetup  -getairportpower en0  | env grep -Po '(?<=:)\s?\w+$'
 On

Macアドレスをコマンドの結果から取得したり。

takuya@~$ ifconfig en0 | env  grep -Po  '(?<=ether\s).+'
60:03:08:a1:82:0c

IPアドレスをしっかり抜き出したり。

takuya@~$ ifconfig en0 | env  grep -Po  '(?<=inet\s)[0-9\.]+'
172.24.49.119

慣れると便利。

慣れてくると割と便利に使うことが出来る。この文字の「ココだけが」ほしいんだけどなぁっていうときに、文字列が取れすぎるとか、絞り込めないときに知っておくと最後の一歩をすることが出来る。

今回つかった grepGNUのパッケージです。

takuya@work$ /Users/takuya/.bin/grep -V
grep (GNU grep) 3.1
Packaged by Homebrew
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.

一般的なLinuxなパッケージにも含まれています。 Linuxディストーションによっては、grep はalias されている場合があります。そのためalias があると上手く動かなったりするので、alias を解除してから試す必要があります。

splitで指定した行数でファイルを分割し拡張子も付与するsplitコマンドの基本的な使い方

split コマンド便利ですよね

split コマンドは、ファイルを分割するコマンドです。

一度くらいは見たことが在るんじゃないでしょうか。

split コマンドでファイルを分割する

ファイルを分割してもアルファベットのよく分からないファイル名になるので、よく使う方法をご紹介。

ただ split コマンドを実行すると次のようなファイルになってしまう。

xaa
xab
xac

行で分割する

バイトで分割しても現代ではあまり役に立たないので、 -l をつけて行数で分割する

split -l 100 input.log

行数で分割すると便利ですよね。

-d をつける

split 対象ファイル -d 出力ファイル

こうすると、ファイル名が 0始まりの数字で分割される

split  input.log  -l  -d out-

出てくるファイル

out-0
out-1

拡張子を付ける --additional-suffix=.csv

extensions つまり、拡張子を付けないとあとで識別が不便なので、拡張子もつけておく。

takuya@work$ split -l 400 entries.csv -d  --additional-suffix=.csv  entries-
takuya@work$ ls en*
entries-00.csv  entries-01.csv  entries-02.csv  entries.csv

まとめて関数にしても良いかも

元のファイルと同じ拡張子で、デフォルト100行くらいで分割する自分専用のコマンドを作っておいても良いかもしれない。

bashでちょっとしたコマンド作成の練習には良いかもね。

参考資料

  • man split

なかなか取れないiPhone修理予約を出来る限り当日に確実に取る方法

iPhoneのバッテリー交換の予約が取れなかった

iPhoneが急に電源が切れたり、残量20%でシャットダウン後に再起動で利用してたが、いい加減限界なので、バッテリー交換に行こうとた。

が、予約が取れない。iPhoneの交換の予約をとるのが難しい。

クイックガレージに行って根掘り葉掘り聞いてきました。

先日、Macの修理でクイックガレージに行くことがありました。そのときにMacの状態チェックを待っている間に、窓口の担当者と雑談してきました。

私「めっちゃ、混んでますねーww」
窓「そうですねー、Macは空いてて暇なんですけどねーwww」
私「この人たち、みんなiPhoneなんですか」(店内を見渡しながら
窓「ですねー、Macは1日1件もあるかないかです」
私「iPhoneは予約をとるのが難しいですもんね」
窓「そうでもないですよ、わりと取れてるみたいです」
私「え?そうなんですか?」

実はコツがあった。

アレコレ話しているとわかってきました。

予約はとるのが難しい、なのでなくタイミングの問題だと。

毎日10時台なら当日予約がWEBから取れる

予約には枠があって開放上限があるようです。データベースの更新タイミングがあるみたい。

予約は一週間前まで取れるのですが、当日枠があり、当日の10時か11時くらいに開放される的な話を聞いた。店舗により時間帯に前後が在るらしい。

そこで毎日10時台か11時台だと比較的かんたんに予約ができるとのこと。

試してみた

おお、当日の予約ができる。今日の予約できるぞ。(11時しらべ

f:id:takuya_1st:20180424120513p:plain

よく見たら、前日に1週間先まで埋まっていたクイックガレージ梅田が予約できる。

f:id:takuya_1st:20180424115555p:plain:w200

予約取れないで困る人は

朝10時か11時すぎに試してみましょう。

予約が取れないとおもったら、正午になる前に調べてみてはどうでしょうか。

お昼休み時間帯に予約が一気に消化されしまうのかもしれません。

ダメ元でキャンセル待ちで訪問して待たされるの辛いですよね。

キャンセル待ちで入れても担当者に次からは予約してくださいねと釘を刺されるし、あまりいい気分はしない。

わたしは、この方法で好きな時間に予約が取れて救われました。