話題の記事を期間・はてブ数・カテゴリなどから検索できるWebサービスです。
話題の記事を期間・はてブ数・カテゴリなどから検索できるWebサービスです。
JSON を行単位にわかりやすく展開してくれるコマンド gron がピンポイントでとても便利 2022-06-13-1 [Programming] コマンドラインでの JSON の操作には jq (軽量JSONパーサ)[2017-10-24-1] を使っています。万能で便利なんですが、奥まったところにある値だけを取りたいときとかちょっと面倒なんですよね。ちらっと値を見たいだけなのにおおげさになっちゃいがち。 ということで、 gron というのを使ってみました。 GitHub - tomnomnom/gron: Make JSON greppable!JSONをgrepしやすくするコマンドラインツールgronの紹介 - Qiitagronでjsonの扱いが楽になった話 – Tower of Engineers あ、これでいいや。 いわゆる「顧客(=私)が本当に必要だったもの」だわ。 例えば、
H(uman-friendly) な grep コマンド hgrep をつくりました. github.com '\w+ で検索した時の出力 ファイルを特定のパターンで検索し,マッチした箇所を構文ハイライトしたコード片で表示します.超ざっくり言うと,ripgrep で検索して bat でマッチ箇所付近を表示するような感じです. grep -C によるコンテキスト表示に似ていますが,マッチ行が近い時は1つのコード片にまとめる,周囲何行を表示するかをヒューリスティックに少し賢く決めているなど,ちょっと出力は工夫しています. 動機 手元のリポジトリでコードを検索する時は 単純に grep で検索してマッチ結果を眺める grep | fzf のように検索結果を fzf で絞り込んだりプレビューする vim $(grep -l ...) のように検索結果をエディタで開く あたりを使い分けているのですが
去年も『本番環境でやらかしちゃった人のアドベントカレンダー』は盛り上がりましたね。 知見が多く、関心しながら拝見しています。 人は必ず何かしらミスを起こすもの。 明日は我が身と思いながら、業務をこなす日々です。 そんな私も業界に入って1年目(前々職)に、本番環境の洗礼にあったことがございます。 当時は苦々しい思いをしましたが、その経験を供養するためにもここに残そうと思います。 発生当時の状況 事件当時、私はサーバのリプレイス案件にアサインしていました。 その業務の中で上司に日常的に運用されているスクリプトの調査を依頼されました。 私はまだ経験が浅かったため理解が合っているかは怪しいですが、関わっていたシステムは設計の段階で大分やっつけだったらしく、 格納場所が間違っているスクリプトやログが散見されました。 リプレイスを切っ掛けに整理をする予定だったと記憶しています。 入ったばかりのペーペー
Linuxのコマンドラインで文字列を検索する際に必要不可欠なコマンドといえば「grep」です。しかし、grepは動画ファイルやPDFファイルの文字列を検索できないのが弱点。そんなgrepの弱点を克服し、動画ファイルのメタデータやデータベースのレコード、画像ファイル内の文字列まで検索可能なコマンドが「ripgrep-all(rga)」です。 GitHub - phiresky/ripgrep-all: rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. https://github.com/phiresky/ripgrep-all rgaはLinuxに限らずWindowsやmacOSでも利用することが可能。今回はUbuntu 20.04でrgaを利用してみます。以下のコマンドを
こんにちは、 ast-grepの作者Herringtonです。 正規表現でコードを検索したことがある方なら、複数行のマッチングや入れ子構造の処理、コメントの無視などに苦労したことがあるかもしれません。 そこで、ast-grep VSCodeという新しい拡張を紹介します。これは、構造的検索と置換(SSR)という技術を利用して、より正確で効率的な検索と置換を実現するツールです。 構造検索は? テキスト検索と置換の限界 例えば、JavaScriptコードをリファクタリングして、lodash の _.filter 関数をネイティブの Array.prototype.filter メソッド に置き換えたいとします。単純なテキスト検索と置換は次のようになります: これは一部のケースではうまくいくかもしれませんが、いくつかの問題があります。 一行の式しかマッチングできません。コードが複数行にまたがってい
Search across a half million git repos. Search by regular expression.
特定の文字列がある行から、別の特定の文字列がある行までを抽出したいということがよくあります。 これgrep等を使うと苦労する話なんですが、flip-flop演算子を使ったPerlのone-linerで可能です。 例えば昨日の記事ではgit help commitの中から--no-edit/オプションの説明を抽出しました。 これは--no-editという文字列が出てくるところから空行までを抽出すれば良い。これは以下のようにすれば可能です。 $ git help commit | perl -nle 'print if /--no-edit/ ... /^\s*$/' 解説自体に空行が混じるケースでは以下のようにすれば良いでしょう。 この例では、--cleanupという文字列が出現してから、次のオプション(-文字列形式)が出るまでを抽出しています。 $ git help commit | pe
大きなコードベースを持ったプロジェクトでコードを書くとなった時に、書くのと同じくらい(またはそれ以上に)コードを読むことになると思います。 なので、コードの検索ツールの良し悪しは生産性に直接的に影響してくると言えるでしょう。 VSCode へのお気持ち 僕は普段はIntelliJを使っていて、その検索ツールの出来(もちろんそれ以外も)に非常に満足していますが、諸々の事情からVSCodeを使いたいという気持ちになることが多々あります。 しかし、どうしてもVSCodeの検索ツールが好きになれず移行する気持ちになれないでいました。 具体的に何が好きになれないかと言うと、Open in Editorを使用しない場合は、検索結果の周辺コードのプレビューを見るためにファイルをポコポコ開いていく必要がありツライです。Open in Editorを使用する場合は、周辺コードの情報量の調整が面倒でツライです
それぞれの意味については使っているうちに自然と身につくかと思います。無理に急いで丸暗記しなくても良いです。 ほかにもたくさんあります。また、使用するツールやプログラム言語によって異なる場合があります。 実践 ディレクトリだけを一覧表示 例えば /etc 以下のファイルを一覧で表示させ、その中からディレクトリ(フォルダ)であるものを表示させたい場合、以下のようにします。 % ls -l /etc | grep '^d' 実行結果(例) % ls -l /etc | grep '^d' drwxr-xr-x 2 root root 4096 Apr 11 06:01 ImageMagick-6 drwxr-xr-x 1 root root 4096 Apr 11 06:02 alternatives drwxr-xr-x 1 root root 4096 Apr 11 06:02 apache
Gitリポジトリ内を検索する機会はよくあると思います。git grepコマンドを使えば、git管理下のファイルのみを対象としてgrepができます。シンプルなコマンドですが、利便性はとても高いと思います。 「このメソッドって、どこで使われてるんだっけ?」 「その定数の定義って、値は何だっけ? どこにあるんだっけ?」 「あのURLって、何箇所で使われているんだろう?」 Gitリポジトリ内を検索する機会はよくあると思います。 このメソッドって、どこで使われてるんだっけ? その定数の定義って、値は何だっけ? どこにあるんだっけ? あのURLって、何箇所で使われているんだろう? git grepコマンドを使えば、Git管理下のファイルのみを対象としてgrepができます。 シンプルなコマンドですが、利便性はとても高いと思います。 なお、grep対象はカレントブランチのみです。 目次 シンプルな例 特定
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 経緯 ごく稀に、プロダクト内に書かれた文言の修正をすることってありますよね。 htmlやテンプレートファイルに文字列が記載されていれば、普通にgrepするなり、sedで一括置換できたりします。 問題は画像です・・・! 画像の中に置き換えなければいけない文字があることもあると思いますが、画像を目視で見ないと分からないですよね。 過去の経験的にも、あとから置き換えなければいけない文字を含む画像が見つかって、修正する・・・みたいなことを何度か経験したことがあります。 (本来は、画像内にあまり文字を書くのは良くないと思うのだけど・・・説明ページ
grep.app https://grep.app/ 「grep.app」は、正規表現を使ってGitHubリポジトリを検索できるWebサービスです。 まだローンチしたてということで、検索できるリポジトリ数は50万。全体で1億リポジトリを抱えるGitHubにおいてはまさに一部のみであるが、本家GitHubのCTOも注目するサービスとあって話題にのぼっています。 GitHubリポジトリを検索してみる 機能はいたってシンプル。Regular expressionにチェックをつけて、正規表現で検索するだけ ヒットしたリポジトリ結果をみることができます。 例えば、このように通常のAnd検索にしにくい場合であっても、簡単に引くことができます。 Hacker News Jason Warner氏もクールな仕事っぷりを称賛しています。 もし、正規表現で困ったら・・・ 便利な検索ツールも、最大の課題は、正規
Performance comparison: counting words in Python, Go, C++, C, AWK, Forth, and Rust March 2021 Summary: I describe a simple interview problem (counting frequencies of unique words), solve it in various languages, and compare performance across them. For each language, I’ve included a simple, idiomatic solution as well as a more optimized approach via profiling. Go to: Constraints | Python Go C++ C
はじめに 「Goの正規表現は遅い」 そんなふうによく言われていました。(最近はあまり聞かなくなりましたが) たとえば、↓の記事ではPythonの正規表現と比較して1.5倍くらい遅いという結果になっています: この話には「Goの正規表現は最悪時間が短くなるように安定したアルゴリズムを採用しているから」という回答があります: ↑の記事の比較では、GoがPerlに対して約10倍以上高速という結果が出ているので、「Goの正規表現は遅くない!はい、論破ー!」というわけですね。 なんでこうなるのかも↑の記事で説明されているとおりですが、Perl(などのバックトラック型エンジン)が入力長に対して指数関数的に実行時間が伸びていくのに対し、Goの正規表現エンジンは入力長に対して線形時間で実行時間が伸びていくアルゴリズムを採用しているため、入力が長くなると急激にGoのほうが有利になるからです: 一方で、入力が
Windows Terminalをログイン時に自動起動するようにして、Quakeモードにしたら、これが便利だ。「Win+Shift+@」でいつでもウィンドウが開く。また、筆者の環境では4Kモニターの横幅で開くので2分割しても十分幅がとれる。そういうこともあって、ファイルのテキスト検索をPowerShellで済ませることにした。 実はPowerShellでもテキスト検索ができる PowerShellでファイルのテキスト検索をするには、「select-string」コマンドを使う。基本的なコマンドの書式は、 select-string [-Pattern]〈REGX〉 [-Path] 〈PATH〉 である。なお、標準で「select-string」にはエイリアスが設定されていて「sls」と略記できる。「-Pattern」「-Path」オプションも省略可能なので、 sls '検索' *.txt
git grep 便利ですよね。 私は git grep と git gsub は本当によく使います。 ところで git grep はローカルリポジトリがないと実行できません。 ローカルにリポジトリがなければ git clone して、 git grep すればいいのですが、もう少し簡単にgrepするために gh-grep を作りました。 github.com gh-grep gh-grepはGitHub APIを使ってGitHub上のリポジトリに対してgrepをするツールです。 特徴は、全てGitHub APIを通じて実行するためローカルに git clone することなくgrepできることです。 また、APIを使っている特徴を活用して複数リポジトリに対してgrepすることなども可能になっています。 あと実行が遅いです。ひたすらGitHub APIを叩いているので...*1。 インストー
Semgrep is a fast, open-source, static analysis tool that searches code, finds bugs, and enforces secure guardrails and coding standards. Semgrep supports 30+ languages and can run in an IDE, as a pre-commit check, and as part of CI/CD workflows. Semgrep is semantic grep for code. While running grep "2" would only match the exact string 2, Semgrep would match x = 1; y = x + 1 when searching for 2.
wsl.exeを使うことで、cmd.exeからLinuxのコマンドを利用できるようになる。このときにcmd.exeのパイプ記号(バーチカルバー)「|」を使って、Win32側とLinux側のコマンドの出力を異なる環境側で処理することも可能だ。 単に相手側のコマンドを起動したり、パイプでデータを渡すことは難しくないが、相手側でもパイプ処理をしたり、複数のコマンドを起動させるとなると、特殊文字のエスケープなどが必要になる。 ここでは、cmd.exeからWSLを使いLinuxコマンドと連携させる方法を解説する。使い慣れたcmd.exeを使い、必要に応じてLinuxのコマンドを使いたいと思うこともある。cmd.exe側からLinux側のパイプ処理などを使うには、cmd.exeの特殊文字のエスケープが必要だが、規則は単純でそれほど難しくない。 なお、cmd.exeからWSL側のコマンドを起動するには、
これは Andrew Gallant 著 ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} の翻訳です。英語版は UNLICENSE と MIT ライセンスのデュアルライセンスで公開されています。 この翻訳は UNLICENSE の許諾に基づいて公開されます。 この記事では新しいコマンドライン検索ツール ripgrep を紹介する。ripgrep は The Silver Searcher (ack クローン) の利便性と GNU grep の高い性能を併せ持つ。ripgrep は高速で、クロスプラットフォーム (Linux, Mac, Windows 用のバイナリが利用可能) で、Rust を使って書かれている。 ripgrep は Github で公開されている。 この記事では不可能なことを試みる: いくつかの有名なコ
また, grep1 には以下のようなオプションがあります。 -v, --invert-match マッチの意味を逆にして、マッチしない行を抜き出して表示します。 -l, --files-with-matches 通常の出力はしません。その代わりに、 grep を普通に実行した際に、何らかの検索結果を表示するような入力ファイルの名前を列挙します (訳注: すなわち、-l オプションを指定すると、 -v オプションを同時に指定しない場合は、パターンにマッチする文字列を含む行が存在するファイルの名前を列挙するということです)。 個々のファイルに対する走査は、最初のマッチで終了します。 -r, --recursive 各ディレクトリの下にあるすべてのファイルを再帰的に読み込みます。 ただし、シンボリックリンクはコマンドラインで指定されたときにのみたどります。 検索対象のファイルが指定されなかった場
The ugrep-indexer utility recursively indexes files to speed up recursive grepping. Also the contents of archives and compressed files are indexed when specified with a command-line option. This eliminates searching them when none of their contents match the specified patterns. ugrep is a grep-compatible fast file searcher that supports index-based searching. Index-based search can be significantl
a more powerful, ultra fast, user-friendly, compatible grep (that is also completely free!) ugrep release 7.1 Star ugrep installs on MacOS: brew install ugrep MacOS: port install ugrep Windows: winget install Genivia.ugrep Windows: choco install ugrep Windows: scoop install ugrep Alpine: apk add ugrep ugrep-doc Android Termux: pkg install ugrep Arch: pacman -S ugrep CentOS: dnf install ugrep Debia
grep is the ultimate text search tool available on virtually all Linux machines. While there are now better alternatives (such as ripgrep), you will still often find yourself on a server where grep is the only search tool available. So it's nice to have a working knowledge of it. That's why is I've created this interactive step-by-step guide to grep operations. You can read it from start to finish
curlコマンドでAPIリクエストを投げる際、ヘッダ情報を出力するオプションを忘れがちなのでメモ。ついでにHTTPステータスコードのみを出力させる方法も調べてみた。 レスポンスボディのみを取得する場合 curlで何もオプションを付けずに対象URLを渡すだけだと、レスポンスボディのみが出力される。 $ curl "http://geoapi.heartrails.com/api/json?method=searchByPostal&postal=1010047" { "response": { "location": [ { "city": "千代田区", "city_kana": "ちよだく", "town": "内神田一丁目", "town_kana": "うちかんだ1ちょうめ", "x": "139.765943", "y": "35.690701", "prefecture": "東
この記事はLinuxその2 Advent Calendar 2020の4日目の記事です。 今回はtoolネタです。vgrepというgrep系のツールがあって結構便利です。これは今年のOpen Source Summit + Embedded Linux Conference North America 2020でのAsk the Expert SessionでGreg KHさんがコードを調べる時にvgrepを使ってると言っていたので知りました。 使い方はわりと簡単なのでREADME.mdを見ればOKだと思います。 grepとの比較 grep系のコマンドなので速さはどうなの?というところですが、qemu上のこんなriscv64環境(cpu4個、メモリ8GB)で試してみます。fedoraのriscv64版にもvgrepパッケージあります。 masami@fedora-riscv:~/linux
log4j_rce_detection.md log4j RCE Exploitation Detection You can use these commands and rules to search for exploitation attempts against log4j RCE vulnerability CVE-2021-44228 Grep / Zgrep This command searches for exploitation attempts in uncompressed files in folder /var/log and all sub folders sudo egrep -I -i -r '\$(\{|%7B)jndi:(ldap[s]?|rmi|dns|nis|iiop|corba|nds|http):/[^\n]+' /var/log This
Show Your Support: Did you know that the hundreds of articles written on Phoronix each month are mostly authored by one individual? Phoronix.com doesn't have a whole news room with unlimited resources and relies upon people reading our content without blocking ads and alternatively by people subscribing to Phoronix Premium for our ad-free service with other extra features. It's Past Time To Stop U
簡単な解説 grep の -v オプションは除外を意味します。 正規表現で ^ は行頭を表します。 正規表現の \s は空白文字を表し、^\s* は行頭から0回以上繰り返しの空白を意味します。 そのため、\s*# と書くと # から始まるコメント行(#より前には空白がいくつあっても良い)にマッチします。 正規表現の $ は行末を表します。^\s*$ だと空白のみの行にマッチします。 実行例 #========================= # ここのコメントは除去されます #========================= class Hoge # このコメントも除去されます def hello puts "Hello, World!" # ここのコメントは除去されません end end # このコメントは除去されます hoge = Hoge.new hoge.hello #=> H
Proof of concept 前口上 簡単なファイルの変換やテキストの変換をする際、行単位でやることが同じ場合、 unixのコマンド、ツールで対応 1を組み合わせる スクリプトを書く が思考ルーチンの標準的な流れとして(個人の意見です)、2のクエリが複雑化したものはシェル芸と呼ばれる. 参考: 【シェル芸人への道】シェル芸人の第一歩 - Qiita 組み合わせるコマンドが少ないうちは解読しやすいのだが、組み合わせが増えるにつれ解読が難しくなり黒魔術となる. このつらみを解消するためのアプローチの一つとして例えばrbコマンドがあり、これはRubyでできることを簡易な記法でできるようにしたアプローチ(3を1,2に近づける)。 ja.algonote.com これはこれで便利なのだが、DSLとしてはRubyの記法並みには長くなってしまうのと処理速度がUnixのコマンドと比べると遅い。 個人的
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く