cutコマンドは、LinuxおよびUnixシステムで使用され、ファイルの各行からパーツとセクションを切り取り、その結果を標準出力に書き込みます。 これは、バイト位置、文字、およびフィールド(区切り文字)によって行の一部を切り取るために使用できます。
このチュートリアルでは、Linuxのcutコマンドを、日常のコマンドラインアクティビティで使用できるいくつかの実用的な例とともに学習します。
カットコマンドと構文
cutコマンドの基本的な構文は次のとおりです。
cut OPTION... [FILE]...
カットオプションを確認してみましょう。オプションがないと、カットコマンドは機能しません。
カットオプション
-f
:フィールドを指定して抽出します。 Cutコマンドは、デフォルトのフィールド区切り文字として「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
。 基本的に、特定の区切り文字とリストされたフィールドに基づいてコンテンツを抽出します。
にとって example 以下は、区切り文字(:)を使用して、 ‘/ etc / passwd’ファイルの各行の最初のフィールドのみを出力します。
$ cut -d':' -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...
以下 example ここで、区切り文字としてスペース( “”)を使用し、「content.txt」という名前のファイルから最初のフィールドを切り取ります。
$ cut -d " " -f 1 content.txt
Ubuntu
Microsoft
OsX
Unix
FreeBSD
この example、特定のファイルから複数のフィールドを抽出します。 ここでは、文字列 ‘/ bin /を持つファイル’ / etc / passwd ‘からコロン(:)区切り文字を使用して1番目と6番目のフィールドを抽出します。bash’:
$ 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
オプション。 このオプションは、指定されたフィールドを除くすべてのフィールドを選択する場所を使用しました。
以下では example コマンドは、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
別のものをチェックしましょう example、ここでは、出力区切り文字を使用して、新しい行の各フィールドに出力します。
ここでは使用します --output-delimiter
なので $’n’
これは改行を示します。
出力を確認します。
$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=
cでカットする方法haracters
The -c
(列)オプションは、文字位置によるカットに使用されます。 「TABS」と「Spaces」も文字として扱われることに注意してください。
content.txtという名前のファイルの各行の最初の文字を印刷するには、以下を使用します。
$ cut -c 1 content.txt
U
M
O
U
F
以下では example ファイルの各行の文字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
コンマ(、)で区切られた数値でバイト位置を指定することにより、行の一部を選択するオプション。 ハイフンを使用すると、バイトの範囲を指定できます。
以下 example ‘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コマンドの組み合わせで使用するのが最も実用的です。
にとって example、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-
別のものを取りましょう example メモリの「total」、「used」、および「free」の値を抽出し、複数のコマンドを使用してテキストファイルに保存するには:
$ 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でカットする方法haracters
The -c
(列)オプションは、文字位置によるカットに使用されます。 「TABS」と「Spaces」も文字として扱われることに注意してください。
content.txtという名前のファイルの各行の最初の文字を印刷するには、以下を使用します。
以下では example ファイルの各行の文字1から7(範囲)を表示します。
特定の開始位置または終了位置で列を選択する方法を確認しましょう。
2番目の文字から最後の文字まで列を抽出するには:
1文字目から4文字目までの列を抽出するには:
バイト単位でカットする方法
使用 -b
コンマ(、)で区切られた数値でバイト位置を指定することにより、行の一部を選択するオプション。 ハイフンを使用すると、バイトの範囲を指定できます。
以下 example ‘content.txt’という名前のファイルの1バイト目、2バイト目、および3バイト目から切り取ります。
以下のコマンドを使用して、範囲をリストすることもできます。
いくつかの実用的なカット例
Cutは、さまざまなLinuxまたはUnixコマンドの組み合わせで使用するのが最も実用的です。
にとって example、psコマンドを使用して、「USER」、「PID」、および「COMMAND」を抽出します。
別のものを取りましょう example メモリの「total」、「used」、および「free」の値を抽出し、複数のコマンドを使用してテキストファイルに保存するには:
結論
cutコマンドは、他の多くのLinuxまたはUnixコマンドとパイプ処理できます。 追加のテキスト処理のために、1つ以上のフィルターをパイプでつなぐことができます。
cutコマンドの制限の1つは、区切り文字として複数の文字を指定することをサポートしていないことです。 複数のブランクは複数のフィールドセパレータとしてカウントされ、目的の出力を取得するには、カットする前にtrコマンドを使用する必要があります。