Linuxカットコマンド
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
これらのフィールドには、次の情報が次の順序で含まれています。コロン文字で区切る:
- ユーザー名
- パスワード(暗号化されている場合はxとして表示)
- ユーザーID番号(UID)
- グループID番号(GID)
- コメントフィールド(fingerコマンドで使用)
- ホームディレクトリ
- シェル
ユーザー名は行の最初のフィールドであるため、システムに各ユーザー名を表示するには、次のコマンドを使用します。
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であるすべてのユーザーのユーザー名とホームディレクトリを出力します。