LinuxでGNU sedを使用する方法
Linuxは、プログラム内の入力と出力を文字ストリームまたは文字シーケンスとして使用します。リダイレクトとパイプの理解を開始する前に、3つの最も重要なI/O(入力と出力(Input and Output))ストリームを理解する必要があります。実際には、これらは特殊なファイルです(UNIXとLinuxの約束に従って、データストリームと周辺機器(デバイスファイル)も一般的なファイルと見なされます)。
>(リダイレクトオペレータ)と|(パイプオペレータ)の違いは、前者はコマンドをファイルに接続し、後者はコマンドの出力と別のコマンドに接続します。
# command >file
# command1 | command2
リダイレクトオペレータは、ファイルを静かに作成または上書きするため、特に慎重に使用し、パイプと混同しないでください。LinuxおよびUNIXシステム上のパイプの利点は、最初のコマンドの出力が1つのファイルに書き込まれるのではなく、2番目のコマンドによって直接読み込まれることです。
次の操作練習では、この詩「A happy child」(著者不明)を使用します。
#sed's/term/replacement/flag'file
デルの例:#sed's/y/Y/g' ahappychild.txt > ahappychild2.txt
置換テキストで特殊文字(たとえば/,,&)を検索または置換する場合は、逆スラッシュを使用して変換する必要があります。
たとえば、文字を1つの記号で置き換えると同時に、行の最初に現れた最初のIをYouに置き換えます。
#sed's/and/\&/g;s/^I/You/g' ahappychild.txt
上記のコマンドでは、^(記号を挿入)が正規表現で1行の先頭を表す記号であることが知られています。
ご覧のように、セミコロン区切りとカッコで包むことで、2つ以上の置換コマンド(正規表現を使用)を接続できます。
もう1つのsedの使い方は、ファイルで選択した一部を表示または削除することです。次の例では、/var/log/messagesの6月8日から最初の5行が表示されます。
#sed-n '/^Jun 8/ p'/var/log/messages |sed-n 1,5p
デフォルトでは、sedは各行を印刷することに注意してください。-nオプションを使用して、この動作を上書きし、sedにファイル(またはパイプ)で一致する部分(最初のコマンドでは「Jun 8」で始まる行を指定し、2番目のコマンドでは1~5行を指定する)だけを印刷する必要があることを伝えることができます。
最後に、スクリプトまたはプロファイルをチェックするときに、ファイル自体を保持し、コメントを削除することができます。次の単行sedコマンドは、(d)空の行または#で始まる行(|文字が2つの正規表現をブールOR操作する)を削除します。
#sed'/^#\|^$/d' apache2.conf
du–sch/path/to/directory/*コマンドは、指定したディレクトリの下にある各サブフォルダとファイルのディスク領域の使用状況(各ディレクトリ全体の状況も表示されます)を人間の読み取り可能な形式で返し、サイズで出力するのではなく、サブフォルダとファイルの名前に従います。次のコマンドを使用して、サイズでソートできます。
#du-sch /var/* | sort -h
次のコマンドを使用して、uniqに各行の最初の6文字(-w 6)(ここでは指定した日付)を比較することで、ログイベントの個数を統計し、各行の先頭に出力された回数(-c)を指定できます。
#cat/var/log/mail.log |uniq-c -w6