Gentooの創設者によるLinuxの基本。 パート2(4/5):テキスト処理とリダイレクト

この文章では、Linuxの多くの興味深く有用なテキストデータコマンドについて学びます。 bashでの入力/出力ストリームの操作の基本についても説明します。







Gentooの創設者によるLinuxの基本ナビゲーション:


パートI
  1. BASH:ナビゲーションの基本 (はじめに)
  2. ファイルとディレクトリを管理する
  3. リンクおよびファイルとディレクトリの削除
  4. グローブルックアップ (合計とリンク)


パートII
  1. 正規表現 (イントロ)
  2. フォルダーの割り当て、ファイル検索
  3. プロセス管理
  4. テキスト処理とリダイレクト
  5. カーネルモジュール (合計とリンク)






ワープロ



リダイレクトに戻る



この一連のチュートリアルの前半で、以下に示すように、コマンドの出力をファイルにリダイレクトする演算子>の使用例を見ました。



$ echo "firstfile" > copyme







出力をファイルにリダイレクトするだけでなく、シェルのこのような強力な機能をチャネル(パイプ)として使用できます。 パイプを使用すると、あるコマンドの出力を別のコマンドの入力に渡すことができます。 次の例を考えてみましょう。



 $ echo "hi there" | wc 
      

1 2 9






シンボル| コマンドの出力を左側に、コマンドの入力を右側に接続するために使用されます。 上記の例では、echoコマンドは出力に「hi there」と出力し、最後に改行文字を付けます。 通常、この出力は端末に表示されますが、チャネルはwcコマンドへの入力にリダイレクトし、行、単語、および文字の数を表示します。



チャンネル(パイプ)の例



別の簡単な例を次に示します。



$ ls -s | sort -n







この場合、ls -sは通常、現在のディレクトリを端末に出力し、各ファイルの前のサイズを示します。 ただし、代わりに、数値をソートするsort -nプログラムに出力を渡します。 これは、ディレクトリ内で最もスペースを占有するファイルを見つけるのに非常に便利です。



次の例はより複雑で、チャネルを使用して得られるパワーと利便性を示しています。 次に、まだレビューされていないが、それらに焦点を合わせていないチームを使用します。 代わりに、パイプがどのように機能し、Linuxでの日常業務でパイプをどのように使用できるかを理解することに焦点を合わせます。



開梱チャンネル



ファイルを解凍および解凍するには、次を実行できます。



$ bzip2 -d linux-2.4.16.tar.bz2

$ tar xvf linux-2.4.16.tar








この方法の欠点は、ディスク上に解凍された中間ファイルが作成されることです。 tarは(指定されたファイルの代わりに)入力からデータを直接読み取ることができるため、パイプを使用して同じ最終結果を取得できます。



$ bzip2 -dc linux-2.4.16.tar.bz2 | tar xvf -







やったー! 圧縮されたtarballは解凍され、中間ファイルなしで圧縮されました。



本物のチャンネル



別のパイプの例を次に示します。



$ cat myfile.txt | sort | uniq | wc -l







catを使用して、myfile.txtの内容をsortコマンドに送信します。 sortは入力を受け取ると、アルファベット順に1行ずつソートし、この形式でuniqプログラムを送信します。 uniqは重複行を削除し(uniqの場合、ソートされた入力リストが必要です)、結果をwc -lに送信します。 以前にwcコマンドを確認しましたが、オプションはありません。 -lオプションを指定すると、コマンドは行数のみを表示します。この場合の単語と文字の数は表示されません。 このようなパイプは、テキストファイル内の一意の行数を出力することがわかります。



テキストエディタでいくつかのファイルを作成してみてください。 それらにこのパイプを使用して、得られる結果を見てください。



ワープロの嵐が始まります!



次に、標準のワードプロセッシング用のLinuxコマンドについて簡単に説明します。 これから多くのプログラムを見るので、それらのそれぞれの例の余地はありません。 代わりに、上記のコマンドのマニュアルページを読んで(たとえば、man echoと入力して)、各コマンドとそのオプションを調べて、少し時間をかけてプレイすることをお勧めします。 原則として、これらのコマンドは処理結果を端末に出力し、ファイルを直接変更しません。 このクイックルックの後、I / Oリダイレクトをさらに詳しく見ていきます。 はい、トンネルの終わりの光はすでに見えています。 :)



echoは、引数を端末に出力します。 出力にエスケープシーケンスを含める場合は、-eオプションを使用します。 たとえば、echo -e 'foo \ nfoo'はfooを出力し、新しい行に移動してからfooを再度出力します。 -nオプションを使用して、デフォルトで行われるように、エコーが出力の最後に改行を追加しないようにします。



catは 、指定されたファイルの内容を端末に出力します。 最初のパイプコマンドとして便利です。たとえば、cat foo.txt | 何とか。



sortは、コマンドラインで指定されたファイルの内容をアルファベット順に表示します。 当然、ソートはパイプからの入力も受け入れることができます。 man sortと入力して、並べ替えオプションを制御するコマンドオプションを表示します。



uniqは、既にソートされたファイルまたはデータストリーム(パイプ経由)を受け入れ、重複行を削除します。



wcは、指定されたファイルまたは入力ストリーム(パイプから)の行、単語、および文字の数を表示します。 man wcと入力して、プログラムの出力を構成する方法を学習します。



headは、ファイルまたはストリームの最初の10行を出力します。 -nオプションを使用して、表示する行数を指定します。



tailは、ファイルまたはストリームの最後の10行を出力します。 -nオプションを使用して、表示する行数を指定します。



taccatに似ていますが、すべての行を逆の順序で出力します。つまり、最後の行が最初に出力されます。



expandは、入力タブ文字をスペースに変換します。 -tオプションは、タブのサイズを指定します。



unexpandは、入力スペースをタブ文字に変換します。 -tオプションは、タブのサイズを指定します。



cutは 、指定された文字で区切られた入力ファイルまたはストリームフィールドから抽出するために使用されます。 (echo 'abc def ghi jkl'を試してください| cut -d '' -f2,2約



nlコマンドは、各入力行にその番号を追加します。 印刷に便利です。



prは、ファイルをページに解析し、ページに番号を付けます。 一般的に印刷に使用されます。



tr-文字を翻訳(変換)するためのツール。 入力ストリームの特定の文字を出力ストリームの指定された文字にマップするために使用されます。



sedは強力なスレッド指向のテキストエディターです。 Funtoo Webサイトの以下のガイドからsedの詳細を確認できます。

LPI試験を受ける予定がある場合は、このシリーズの最初の2つの記事を必ず読んでください。



awkは、指定されたパターンに従って入力ストリームを行ごとに解析および処理するための洗練された言語です。 awkの詳細については、Funtoo Webサイトで次の一連のガイドをお読みください。

odは 、入力を8進数、16進数などで表すように設計されています。 フォーマット。



split-このコマンドは、大きなファイルをいくつかの小さく管理しやすい部分に分割するために使用されます。



fmtは、長いテキスト行を「ラップ」するために使用されます。 この機能はほとんどのテキストエディタに組み込まれているため、今日ではあまり有用ではありませんが、チームはそれを知るのに十分です。



pasteは2つ以上のファイルを入力として受け取り、行ごとに連結して結果を出力します。 テキストの表または列を作成するのに便利な場合があります。



結合は貼り付けに似ています。このユーティリティを使用すると、共通のフィールド(デフォルトでは各行の最初のフィールド)で2つのファイルを結合できます。



teeは、入力引数をファイルと画面に同時に出力します。 これは、何かのログを作成したい場合や、画面でプロセスを確認したい場合に便利です。



嵐は終わりました! リダイレクト



コマンドラインでLike>を使用すると、<を使用してファイルをリダイレクトできますが、すでにコマンドの入力にリダイレクトされています。 多くのコマンドでは、単にファイル名を指定できます。 残念ながら、一部のプログラムは標準入力でのみ動作します。



Bashおよびその他のシェルは、「herefile」の概念をサポートしています。 これにより、一連の行の形式でコマンドに入力を与え、後続のコマンドで値の入力シーケンスの終わりを示すことができます。 これを示す最も簡単な方法は、例を使用することです。



$ sort <<END

apple

cranberry

banana

END


apple

banana

cranberry








上記の例では、apple、cranberry、bananaの単語を入力し、その後に「END」を入力して入力の終わりを示します。 次に、ソートプログラムは単語をアルファベット順に返します。



「>>」を使用



>>は<<に多少似ているでしょうが、そうではありません。 毎回上書きするのではなく、単にファイルに出力を追加することができます>。 例:



$ echo Hi > myfile

$ echo there. > myfile

$ cat myfile

there.








おっと! Hi!で一部を失いました。 そして、ここで私たちが念頭に置いていたものです:



$ echo Hi > myfile

$ echo there. >> myfile

$ cat myfile

Hi

there.








だからそれはましだ!



翻訳をしてくれたDmitry Minsky (Dmitry.Minsky@gmail.com)に感謝します。



継続するには...






著者について



ダニエル・ロビンス



Daniel Robbinsは、Gentooコミュニティの創設者であり、Gentoo Linuxオペレーティングシステムの作成者です。 ダニエルは妻のメアリーと元気な娘2人とニューメキシコに住んでいます。 彼はFuntooの創設者兼代表でもあり、 IBM developerWorks 、Intel Developer Services、およびC / C ++ Users Journalの技術記事を数多く執筆しています。



クリス・ハウザー



クリス・ハウザーは、1994年にテイラー大学(米国インディアナ州)の管理者チームに参加し、コンピューターサイエンスと数学の学士号を取得して以来、UNIXの支持者でした。 その後、Webアプリケーション、ビデオ編集、UNIXドライバー、暗号化保護など、さまざまな分野で働きました。 現在、Sentry Data Systemsで働いています。 Chrisは、Gentoo LinuxやClojureなどの多くの無料プロジェクトにも貢献し、 The Joy of Clojureの共同執筆者でもあります。



アロン・グリフィス



Iron Griffisはボストンに住んでおり、過去10年間、Hewlett-PackardでTru64、Linux、Xen、KVMの仮想化セキュリティ認証用のUNIXネットワークドライバー、最近ではHP ePrintプラットフォームなどのプロジェクトに従事しました。 プログラミングの暇な時間に、Ayronは、自転車に乗ったり、ビットをジャグリングしたり、ボストンのプロ野球チームRed Socksを応援したりする際に、プログラミングの問題を消し去ることを好みます。



All Articles