Linuxカットコマンド

更新:2019年5月4日Computer Hope

Unixの場合-オペレーティングシステムと同様に、cutコマンドは1つまたは複数のファイルの各行のセクションを削除(「切り取り」)します。

このドキュメントでは、GNU / Linuxバージョンのcutについて説明します。

構文

cut OPTION... ...

オプション

-b、-bytes = LIST LISTで指定されているように、各行からバイトのみを選択します。 LISTは、バイト、バイトのセット、またはバイトの範囲を指定します。以下のLISTの指定を参照してください。
-c、-characters = LIST LISTで指定されているように各行から文字のみを選択します。 LISTは、文字、文字のセット、または文字の範囲を指定します。以下のリストの指定を参照してください。
-d、-delimiter = DELIM フィールド区切り文字のタブの代わりに文字DELIMを使用します。
-f、-fields = LIST 各行でこれらのフィールドのみを選択します。 -sオプションが指定されていない限り、区切り文字を含まない行も出力します。 LISTは、フィールド、フィールドのセット、またはフィールドの範囲を指定します。以下のリストの指定を参照してください。
-n このオプションは無視されますが、互換性の理由から含まれています。
-complement 選択したバイト、文字、またはフィールドのセットを補完します。
-s、-only-delimited 区切り文字を含まない行を出力しません。
-output-delimiter = STRING 出力区切り文字列としてSTRINGを使用します。デフォルトでは、入力区切り文字を使用します。
-help ヘルプメッセージを表示して終了します。
-version バージョン情報を出力して終了します。

使用上の注意

cutを呼び出すときは、-b、-c、または-fオプションを使用しますが、そのうちの1つだけを使用します。

FILEが指定されていない場合、cutは標準入力から読み取ります。

LISTの指定

各LISTは、整数、整数の範囲、またはコンマで区切られた複数の整数範囲で構成されます。選択された入力は、読み取られるのと同じ順序で書き込まれ、出力に1回だけ書き込まれます。範囲は次の要素で構成されます。

たとえば、次のテキストを含むdata.txtという名前のファイルがあるとします。

onetwothreefourfivealphabetagammadeltaepsilon

この例では、これらの各単語はスペースではなくタブ文字で区切られています。タブ文字はカットのデフォルトの区切り文字であるため、デフォルトでは、フィールドはタブで区切られたものと見なされます。

各行の3番目のフィールドのみを「切り取る」には、次のコマンドを使用します。

cut -f 3 data.txt

…次のように出力されます。

threegamma

代わりに、各行の2番目から4番目のフィールドのみを「切り取る」場合は、次のコマンドを使用します。

cut -f 2-4 data.txt

…次のように出力されます。

twothreefourbetagammadelta

最初から1つだけを「カット」する場合-各行の2番目と4番目から5番目のフィールド(3番目のフィールドは省略)では、次のコマンドを使用します。

cut -f 1-2,4-5 data.txt

…次のように出力されます。

onetwofourfivealphabetadeltaepsilon

または、あなたが最初の2つのフィールドを省略して、3番目のフィールドとその後のすべてのフィールドが必要です。この場合、次のコマンドを使用できます:

cut -f 3- data.txt

…これにより、次のように出力されます:

threefourfivegammadeltaepsilon

LISTで範囲を指定することは、行から文字(-c)またはバイト(-b)を切り取る場合にも適用されます。たとえば、data.txtのすべての行の3番目から12番目の文字のみを出力するには、次のコマンドを使用します。

cut -c 3-12 data.txt

…これにより出力されます次のとおりです。

etwothrephabetag

各単語間の「スペース」は実際には単一のタブ文字であるため、出力の両方の行に10文字が表示されます。英数字と2つのタブ文字。言い換えると、cutは各行の最初の2文字を省略し、タブをそれぞれ1文字としてカウントします。タブをそれぞれ1文字として数え、3〜12文字を出力します。

この場合、文字の代わりにバイトをカウントすると、同じ出力になります。これは、ASCIIでエンコードされたテキストファイルでは、各文字が1バイト(8ビット)で表されるためです。 )データの。したがって、次のコマンド:

cut -b 3-12 data.txt

…ファイルdata.txtの場合、まったく同じ出力が生成されます:

etwothrephabetag

タブ以外の区切り文字の指定

タブ文字は、cutがフィールドを構成するものを決定するために使用するデフォルトの区切り文字です。したがって、ファイルのフィールドがすでにタブで区切られている場合は、別の区切り文字を指定する必要はありません。

ただし、区切り文字として任意の文字を指定できます。たとえば、ファイル/ etc / passwdには、システム上の各ユーザーに関する情報が1行に1人ずつ含まれ、各情報フィールドはコロン( “:”)で区切られます。たとえば、rootユーザーの/ etc / passwdの行は次のようになります。

root:x:0:0:root:/root:/bin/bash

これらのフィールドには、次の情報が次の順序で含まれています。コロン文字で区切る:

  1. ユーザー名
  2. パスワード(暗号化されている場合はxとして表示)
  3. ユーザーID番号(UID)
  4. グループID番号(GID)
  5. コメントフィールド(fingerコマンドで使用)
  6. ホームディレクトリ
  7. シェル

ユーザー名は行の最初のフィールドであるため、システムに各ユーザー名を表示するには、次のコマンドを使用します。

cut -f 1 -d ":" /etc/passwd

…出力されます例:

rootdaemonbinsyschope

(一般的なシステムには、システムサービスに固有のアカウントなど、さらに多くのユーザーアカウントがありますが、この例では、ふりをします。ユーザーは5人だけです。)

/ etc / passwdファイルの各行の3番目のフィールドはUID(ユーザーID番号)であるため、各ユーザー名とユーザーID番号を表示するには、次のコマンドを使用します。

…たとえば、次のように出力されます。

root:0daemon:1bin:2sys:3chope:1000

ご覧のとおり、出力は次のようになります。デフォルトでは、入力に指定されたものと同じ区切り文字を使用して区切られます。この場合、それはコロン文字( “:”)です。ただし、入力と出力に異なる区切り文字を指定できます。したがって、前のコマンドを実行したいが、出力をスペースで区切った場合は、次のコマンドを使用できます:

cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000

ただし、出力をタブで区切る場合はどうでしょうか。 ?コマンドラインでのタブ文字の指定は、印刷できない文字であるため、少し複雑です。コマンドラインで指定するには、シェルからタブ文字を「保護」する必要があります。これは、どのシェルを使用するかによって異なります。再使用しますが、Linuxのデフォルトシェル(bash)では、タブ文字を$ “\ t”で指定できます。したがって、コマンド:

cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd

…は次のように出力します:

root0daemon1bin2sys3chope1000

cut -c 3 file.txt

ファイルfile.txtのすべての行の3番目の文字を出力します。他の文字は省略します。

cut -c 1-3 file.txt

ファイルfile.txtのすべての行の最初の3文字を出力し、残りは省略します。

cut -c -3 file.txt

と同じ上記のコマンド。 file.txtのすべての行の最初の3文字を出力します。

cut -c 3- file.txt

ファイルfile.txtの各行の3番目から最後の文字を省略して出力します。最初の2文字。

cut -d ":" -f 1 /etc/passwd

ファイル/ etc / passwdの最初のフィールドを出力します。フィールドはコロン( “:”)で区切られます。 / etc / passwdの最初のフィールドはユーザー名であるため、このコマンドはpasswdファイル内のすべてのユーザー名を出力します。

grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6

1番目と6番目のフィールドを出力します。ログインシェルとして/ bin / bashを指定する/ etc / passwdファイル内の任意のエントリのコロンで区切られます。このコマンドは、ログインシェルが/ bin / bashであるすべてのユーザーのユーザー名とホームディレクトリを出力します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です