背景
Amazonのページのリンクをコピペすると、こんな感じになる。長い!!🥺
もっとひどい場合だと(上と同じもの)、めっちゃ長い!!!!😭
本当は、これだけでよい😊(3つともクリックしてみてください。同じページに飛びます)
不必要にURLが長いので、
- URLをメールやLINEで送るときに困る
- 自分の読書メモにURLを貼っておこうとおもったときに困る
AmazonのURLを短縮するサービスはいくつかあるみたいだけれど、仕組みは単純なので、正規表現も使ってみたい年頃だし、ワンライナーで書いてみた。
短縮の方針
Amazonの商品ページURLをきれいにするロジックを考えるや[Amazon URL短縮ブックマークレット][02]にあるように、要は
https://www.amazon.co.jp/d/番号/
(番号は10桁の半角英数字、アルファベットは大文字のみ)とすればよい。
sedコマンドで短縮する。
ワンライナー
下記コマンドで短縮できる。
$ sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
じっさいには、(macOSの場合)URLを(クリップボードに)コピーし
$ pbpaste | sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
上記URLをコピーして、上記sedをすると
$ pbpaste | sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
https://www.amazon.co.jp/d/4791714059
しあわせだ……!
コマンドのなかみの解説
pbpasteはmacOSのシステムクリップボードから内容を取得している。これをパイプ(|)で'sed`コマンドにわたしている。
sedの-Eオプションは、拡張正規表現。ざっくりといえば、各種記号を(ほとんど)エスケープしなくてよいので、目に優しく書きやすい。
sedでの基本的な発想は
-
https://www.amazon〜/を拾う(\1と名付けられる) -
xxxxxxxxxxという10桁の英数字を拾う(\2と名付けられる) -
\1と\2をくっつける
https://〜については、www.amazon.co.jpの場合とwww.amazon.comの場合を想定。
xxxxxxxxxxについては、10桁の半角英数字(アルファベットは大文字のみ)を想定。
(いずれも[Amazon URL短縮ブックマークレット][02]による)
sed -E 's/(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+/\1d\/\2/'
を日本語訳すると
sed -拡張正規表現をつかう '置換/2つの文字列を拾う/1こめと2こめをくっつける'
となる。
https://www.amazon〜/を拾う
正規表現はhttps:\/\/[^/]+\/
-
\/は、/はエスケープが必要のため。 -
[^/]は、「/以外の文字」 -
[^/]+で、「/以外の文字が1文字以上続く」
ということで、日本語訳すると「https://につづいて、/以外の文字が1文字以上続き、そのつぎに/となる」ものを探せ、となる。
マッチに対して()でくくると、\1などの名前で使えるようになる。カッコでくくったところまで表現すると
(https:\/\/[^/]+\/)
xxxxxxxxxxという10桁の英数字を拾う
正規表現は[0-9A_Z]{10}
-
[0-9]で、「任意の半角数字1文字」 -
[A-Z]で、「任意の半角英字1文字(大文字)」 - くっつけて、
[0-9A-Z]で、「任意の半角英数字1文字(アルファベットは大文字)」 -
[0-9A-Z]{10}で、「任意の半角英数字10文字(アルファベットは大文字)」
おなじく、マッチを\2でつかえるようにカッコでくくると
([0-9A_Z]{10})
残りの部分
(https:\/\/[^/]+\/).+([0-9A_Z]{10}).+は、半分日本語訳にすると
(https://アマゾン).+(半角英数字10文字).+となる。
.+は「文字ならなんでもいい」ので、これで全体にマッチする。
\1と\2をくっつける
sedの後半部分(s/検索/置換/の置換部分)は
\1d\/\2
これは略。(\1と\2はマッチを意味して、\/は/をエスケープしている)
おわりに
これをどう使うか
pbpasteを併用したワンライナーもじゅうぶん便利だけど、Alfred Workflowと組み合わせてつかいたい。Alfred Workflowの作成については、別記事で。
なぜURLが長いか
Amazonの商品ページURLをきれいにするロジックを考えるにもあるとおり、Amazon側の都合によるのであって、ユーザ側にいいことがあるわけではない(アフィリエイトの人は別として)。
リソース
- 01.第1回 Amazonの商品ページURLをきれいにするロジックを考える
- [02.Amazon URL短縮ブックマークレット][02]
- [03.sed コマンド - 基本正規表現と拡張正規表現][03]
[02]:https://kosu.blog/2019/02/09/amazon-url-shortening/)
[03]:http://hydrocul.github.io/wiki/commands/sed.html#extended-regexp
環境
- macOS BigSur 11.1
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)