環境
- trurl version 0.16.1
やりたいこと
ログ調査でFQDNで集計する必要があった。RubyやPythonならパースするためのメソッドがあるがLinuxのコマンドで処理しようとすると難しい。
sedやawkなどで頑張ってもいいが限界がある。と思っていたらcurlの作者がパースするコマンドを作ってくれていた。神
インストール
Ubuntuの場合は前もって apt install libcurl4-openssl-dev が必要。
git clone https://github.com/curl/trurl.git cd trurl make sudo make install
ないとビルドエラーになる。
❯ make
cc $(curl-config --cflags) -W -Wall -Wshadow -pedantic -Wconversion -Wmissing-prototypes -Wwrite-strings -Wsign-compare -Wno-sign-conversion -Werror -g -c -o trurl.o trurl.c
/bin/sh: 1: curl-config: not found
trurl.c:29:10: fatal error: curl/curl.h: そのようなファイルやディレクトリはありません
29 | #include <curl/curl.h>
| ^~~~~~~~~~~~~
compilation terminated.
make: *** [<ビルトイン>: trurl.o] エラー 1
デフォルトでは/usr/local/bin/trurlにインストールされる。
❯ which trurl /usr/local/bin/trurl
❯ trurl --version trurl version 0.16.1 libcurl/8.5.0 [built-with 8.5.0] features: imap-options normalize-ipv4 punycode punycode2idn url-strerror white-space zone-id
使い方
元のURLのホスト名(curl.se)をexample.comに置き換える
$ trurl --url https://curl.se --set host=example.com https://example.com/
ポート番号を8080に指定する
$ trurl --url https://curl.se/we/are.html --set port=8080 https://curl.se:8080/we/are.html
何もない状態から、指定した要素で新しいURLを作り出すこともできる
$ trurl --set host=example.com --set scheme=ftp ftp://example.com/
URLの末尾に新しいパスを追加する
$ trurl --url https://curl.se/hello --append path=you https://curl.se/hello/you
すでにクエリがあるURLに、新しいパラメータ(search=string)を追加する
$ trurl --url "https://curl.se?name=hello" --append query=search=string https://curl.se/?name=hello&search=string
トラッキングコードなど、特定のパターンに一致するクエリパラメータを削除する
$ trurl "https://curl.se?search=hey&utm_source=tracker" --qtrim "utm_*" https://curl.se/?search=hey
URLからパスの部分(/we/are.html)だけを抜き出す
$ trurl --url https://curl.se/we/are.html --get '{path}'
/we/are.html
URLを各要素に分解して、JSON形式で表示させる
❯ trurl "https://fake.host/search?q=answers#frag" --json
[
{
"url": "https://fake.host/search?q=answers#frag",
"parts": {
"scheme": "https",
"host": "fake.host",
"path": "/search",
"query": "q=answers",
"fragment": "frag"
},
"params": [
{
"key": "q",
"value": "answers"
}
]
}
]
ログファイルなどから一括処理するには --url-file を使う。
❯ cat /tmp/urls.txt | trurl --url-file - -g '{host} {path}'
www.google.com /
example.com /users/profile
www.google.com /search
chatgpt.com /share/e4f5g6h7
www.google.com /search
あとの細かい仕様は公式ドキュメントを読もう