cutコマンドは、LinuxおよびUnixシステムで使用され、ファイルの各行からパーツとセクションを切り取り、その結果を標準出力に書き込みます。これは、バイト位置、文字、およびフィールド(区切り文字)によって行の一部を切り取るために使用できます。
このチュートリアルでは、Linuxのcutコマンドを、日常のコマンドラインアクティビティで使用できるいくつかの実用的な例とともに学習します。
コマンドと構文の切り取り
cutコマンドの基本的な構文は次のとおりです。
cut OPTION... [FILE]...
カットオプションを確認してみましょう。オプションがないと、カットコマンドは機能しません。
カットオプション
-f
:フィールドを指定して抽出します。切り取りコマンドは、デフォルトのフィールド区切り文字として「TAB」を使用します。
-d
:「タブ」はデフォルトの区切り文字であり、このオプションを使用すると、特定の区切り文字を使用できます。
-b
:バイトを指定して抽出します。バイト範囲も指定できます。
-c
:文字でカットします。これは、コンマで区切られた数値のリスト、またはハイフン(-)で区切られた数値の範囲にすることができます。
–complement
:これは選択を補完します
–output-delimiter
:出力区切り文字を変更するには、オプション-output-delimiter='delimiter'を使用します。
--only-delimited
:カットは区切り文字を含まない行を印刷しません
このチュートリアルでは、例を説明するために、「content.txt」という名前の次のテキストファイルと/ etc/passwdファイルを使用します。
$ cat content.txt
Ubuntu Linux
Microsoft Windows
OsX El Capitan
Unix
FreeBSD
区切り文字でカットする方法
最も一般的に使用されるカットオプションは、-d
の組み合わせです。 および-f
。基本的に、特定の区切り文字とリストされたフィールドに基づいてコンテンツを抽出します。
たとえば、次の例では、区切り文字(:)を使用して'/ etc/passwd'ファイルの各行の最初のフィールドのみを出力します。
$ cut -d':' -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...
次の例では、区切り文字としてスペース( "")を使用し、「content.txt」という名前のファイルから最初のフィールドを切り取ります。
$ cut -d " " -f 1 content.txt
Ubuntu
Microsoft
OsX
Unix
FreeBSD
この例では、特定のファイルから複数のフィールドを抽出します。ここでは、文字列'/ bin/bash'を持つファイル'/etc / passwd'からコロン(:)区切り文字を使用して1番目と6番目のフィールドを抽出します:
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
slax:/home/slax
フィールドの範囲を表示するには、以下に示すように、開始フィールドと終了フィールドをハイフン(-)で区切って指定します。
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
slax:x:1000:1000:/home/slax:/bin/bash
出力選択を補完する方法
選択フィールドリストを補完するには、--complement
を使用します オプション。このオプションは、指定されたフィールドを除くすべてのフィールドを選択する場所を使用しました。
次の例では、コマンドはfrom'/ etc/passwd'ファイルの2番目のフィールドを除くすべてのフィールドを出力します。
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2
root:0:0:root:/root:/bin/bash
出力区切り文字を指定する方法
出力区切り文字を指定するには、--output-delimiter
を使用します オプション。入力区切り文字は-d
で指定されます オプションであり、デフォルトでは、出力区切り文字は入力区切り文字と同じです。
最初に、次のように出力区切り文字を使用せずに出力をチェックアウトしましょう。
$ cut -d: -f1,7 /etc/passwd | sort | uniq -u
_apt:/usr/sbin/nologin
backup:/usr/sbin/nologin
bin:/usr/sbin/nologin
daemon:/usr/sbin/nologin
dnsmasq:/usr/sbin/nologin
games:/usr/sbin/nologin
gnats:/usr/sbin/nologin
irc:/usr/sbin/nologin
landscape:/usr/sbin/nologin
list:/usr/sbin/nologin
lp:/usr/sbin/nologin
lxd:/bin/false
--output-delimiter
を追加しました オプションと入力区切り文字のコロン(:)は、次のように出力区切り文字「SPACE」に置き換えられます。
$ cut -d: -f1,7 --output-delimiter ' ' /etc/passwd | sort | uniq -u
_apt /usr/sbin/nologin
backup /usr/sbin/nologin
bin /usr/sbin/nologin
daemon /usr/sbin/nologin
dnsmasq /usr/sbin/nologin
games /usr/sbin/nologin
gnats /usr/sbin/nologin
irc /usr/sbin/nologin
landscape /usr/sbin/nologin
list /usr/sbin/nologin
lp /usr/sbin/nologin
lxd /bin/false
別の例を確認してみましょう。ここでは、出力区切り文字を使用して、新しい行の各フィールドに出力します。
ここでは、--output-delimiter
を使用します $’\n’
として これは新しい行を示します。
出力を確認してください:
$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=
文字による切り方
-c
(列)オプションは、文字位置によるカットに使用されます。 「TABS」と「Spaces」も文字として扱われることに注意してください。
content.txtという名前のファイルの各行の最初の文字を印刷するには、以下を使用します。
$ cut -c 1 content.txt
U
M
O
U
F
次の例では、ファイルの各行の文字1から7(範囲)を表示します。
$ cut -c 1-7 content.txt
Ubuntu
Microso
OsX El
Unix
FreeBSD
特定の開始位置または終了位置で列を選択する方法を確認しましょう。
2番目の文字から最後の文字まで列を抽出するには:
$ cut -c2- content.txt
buntu Linux
icrosoft Windows
sX El Capitan
nix
reeBSD
1文字目から4文字目までの列を抽出するには:
cut -c-4 content.txt
Ubun
Micr
OsX
Unix
Free
バイト単位でカットする方法
-b
を使用します コンマ(、)で区切られた数値でバイト位置を指定することにより、行の一部を選択するオプション。ハイフンを使用すると、バイトの範囲を指定できます。
次の例は、「content.txt」という名前のファイルの1バイト目、2バイト目、および3バイト目から切り取ったものです。
$ cut -b 1,2,3 content.txt
Ubu
Mic
OsX
Uni
Fre
次のコマンドを使用して範囲を一覧表示することもできます:
$ cut -b 1-3,5-7 content.txt
Ubutu
Micoso
OsXEl
Uni
FreBSD
いくつかの実用的なカット例
Cutは、さまざまなLinuxまたはUnixコマンドを組み合わせて使用するのが最も実用的です。
たとえば、psコマンドを使用して「USER」、「PID」、および「COMMAND」を抽出するとします。
ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
USER PID COMMAND
0 676 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220
0 681 /sbin/agetty -o -p -- \u --noclear tty1 linux
0 23174 -bash
0 26737 ps -L u n
0 26738 tr -s
0 26739 cut -d -f 2,3,14-
別の例を見て、メモリの「合計」、「使用済み」、「空き」の値を抽出し、複数のコマンドを使用してテキストファイルに保存します。
$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
Output
$ cat memory.txt
985 86 234
結論
cutコマンドは、他の多くのLinuxまたはUnixコマンドとパイプ処理できます。追加のテキスト処理のために、1つ以上のフィルターをパイプでつなぐことができます。
cutコマンドの制限の1つは、区切り文字として複数の文字を指定することをサポートしていないことです。複数のブランクは複数のフィールドセパレータとしてカウントされ、目的の出力を取得するには、カットする前にtrコマンドを使用する必要があります。
\n' root /root /bin/bash operator /root /sbin/nologin
文字による切り方
-c
(列)オプションは、文字位置によるカットに使用されます。 「TABS」と「Spaces」も文字として扱われることに注意してください。
content.txtという名前のファイルの各行の最初の文字を印刷するには、以下を使用します。
次の例では、ファイルの各行の文字1から7(範囲)を表示します。
特定の開始位置または終了位置で列を選択する方法を確認しましょう。
2番目の文字から最後の文字まで列を抽出するには:
1文字目から4文字目までの列を抽出するには:
バイト単位でカットする方法
-b
を使用します コンマ(、)で区切られた数値でバイト位置を指定することにより、行の一部を選択するオプション。ハイフンを使用すると、バイトの範囲を指定できます。
次の例は、「content.txt」という名前のファイルの1バイト目、2バイト目、および3バイト目から切り取ったものです。
次のコマンドを使用して範囲を一覧表示することもできます:
いくつかの実用的なカット例
Cutは、さまざまなLinuxまたはUnixコマンドを組み合わせて使用するのが最も実用的です。
たとえば、psコマンドを使用して「USER」、「PID」、および「COMMAND」を抽出するとします。
別の例を見て、メモリの「合計」、「使用済み」、「空き」の値を抽出し、複数のコマンドを使用してテキストファイルに保存します。
結論
cutコマンドは、他の多くのLinuxまたはUnixコマンドとパイプ処理できます。追加のテキスト処理のために、1つ以上のフィルターをパイプでつなぐことができます。
cutコマンドの制限の1つは、区切り文字として複数の文字を指定することをサポートしていないことです。複数のブランクは複数のフィールドセパレータとしてカウントされ、目的の出力を取得するには、カットする前にtrコマンドを使用する必要があります。