コンソールの作業を簡素化するruby -e

多くの人が知っていると思うが、RubyはPerlの影響下で作成されたので、Rubyが「実用的なデータ抽出とレポート」というニッチでPerlを置き換えることができるという事実には驚くべきことはありません。 この短い投稿では、コンソールでテキストを微調整するためのルビーの使用について説明します。







TL; DR



次の2つの構造を覚えています。







  1. ... | ruby -lne <CODE>



  2. ruby -lne <CODE> file1, file2, ...





前者の場合、入力は前のコマンドの出力になり、後者の場合-ファイルの内容の連結になります。







CODEは、 $_



変数に書き込まれる入力の各行に対して実行されます。 重要 :行の末尾には\n



が付きません(これは-l



フラグが原因です)。









反射cat









 ruby -lne 'puts $_.reverse' file-to-show.txt
      
      





現在のディレクトリ内のファイル名の最初の10文字のみを印刷します。







 ls | ruby -lne 'puts $_[0..9]'
      
      





いくつかの詳細



事前定義された変数



Rubyには多くの定義済み変数がありますが、その多くはあなたも私も知らないかもしれません。 その中には、Perlから移行されたものもあります。たとえば、 $_



および$<



(実際、Perlにはそのような変数はありませんが、/ stdinファイルから読み取り、 $_



を設定する入力演算子<>



構造があります)。







それらのリストはここにあります







投稿のトピックの一部として、前述の$_



$<



に注意を払うことをお勧めします。さらに、 $~



$1



$stdin



ARGV



$stdout



STDIN



およびSTDOUT



も注意してください。







怖い秘密を取得



多くの場合、キーボード入力を要求するためにgets



を使用しgets



ます。 ただし、コマンドラインで引数-引数をチェックすることを誰もが知っているわけではありません。







ARGV



空でARGV



場合、 gets



はファイルのリストがそこに示されていると信じ、最初のものをgets



し、そこから行を読み取ろうとします。







スクリプトを実行します。







 # myscript.rb puts gets
      
      





そして、 ruby myscript.rb



を使用して実行しruby myscript.rb



。 予想どおり、プログラムは入力を待っています。







次のように実行します:







 ruby myscript.rb no-such-file
      
      





エラーが発生します:「no-such-file」ファイルは存在しません。 次に、スクリプトを変更します。







 # myscript.rb ARGV.pop puts gets
      
      





インタプリタは再び入力を待ちます。 ポップでは、「no-such-file」を破棄しました。







通訳オプション



これは私の単一行パターンのようです:







 ruby -lne <CODE> [file1, file2, ...]
      
      





(多くの場合-l



なし)







使用されるオプションと潜在的に有用なオプションの説明:









おわりに



ruby -e



を初めて使用したとき、 cut



コマンドがプロンプトを表示しました。 私はそれを数回使用しなければならず、そのたびに、緊張した頭がすぐに理解したくないマニュアルを開く必要がありました。







結局、「はい、 cut



/ awk



/ sed



使い方がわかりません。しかし、Rubyをよく知っているのに、なぜそれをすべての小さなことに使えないのですか?」







実際、最終的には、多くのコマンドを覚えるのではなく、実験的に得られた構造だけを思い出すだけで十分です。







ruby -lne CODE









そしてそれだけです。 行ごとのテキスト処理に関する私の問題はすべて解決されました。







私が知る限り、ここでは革新的なものは何もありません。ひげを生やしたシステム管理者は長い間この方法でperlを使用しています。 そして、あなたの中には、これについて知っているが、それを使う価値のある人はいますが、それを使わない人がたくさんいると思います。 確かに、パイニストにも似たようなものがあります。







PS最後に、ここに使用例があります:







シリーズのシーズンをダウンロードしましたが、ファイル名が「s01e01-super-mega-macho.mkvによるスーパーリリース」のようにいので、ライブラリ内のすべてが美しいように名前を変更します。 お願い:







 ls | ruby -lne 'File.rename($_, "#{$_[0..5]}.mkv")'
      
      






All Articles