LoginSignup
2
0

More than 3 years have passed since last update.

Amazonの長い長いURLを短縮するワンライナー(正規表現を勉強してみた)

Last updated at Posted at 2021-01-06

背景

Amazonのページのリンクをコピペすると、こんな感じになる。長い!!🥺

もっとひどい場合だと(上と同じもの)、めっちゃ長い!!!!😭

本当は、これだけでよい😊(3つともクリックしてみてください。同じページに飛びます)

不必要にURLが長いので、

  • URLをメールやLINEで送るときに困る
  • 自分の読書メモにURLを貼っておこうとおもったときに困る

AmazonのURLを短縮するサービスはいくつかあるみたいだけれど、仕組みは単純なので、正規表現も使ってみたい年頃だし、ワンライナーで書いてみた。

短縮の方針

Amazonの商品ページURLをきれいにするロジックを考えるAmazon URL短縮ブックマークレットにあるように、要は
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短縮ブックマークレットによる)

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側の都合によるのであって、ユーザ側にいいことがあるわけではない(アフィリエイトの人は別として)。

リソース

環境

  • macOS BigSur 11.1
  • MacBook Pro (13-inch, 2020, Four Thunderbolt 3 Ports)
2
0
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
2
0