GNU/Linux >> Linux の 問題 >  >> Linux

実用的な例を使用したLinuxカットコマンド

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コマンドを使用する必要があります。


Linux
  1. Linux – / usr/binと/usr/sbinを/bin(gnu / linux)にマージしますか?

  2. 実用的な例を含む Linux rsync コマンド

  3. バイナリを /bin、/sbin、/usr/bin、および /usr/sbin にインストールし、 --prefix および DESTDIR と対話します

  1. 実用的な例でLinuxHexdumpコマンドを使用する方法

  2. LinuxでのJQコマンドと例

  3. /usr/sbin、/usr/local/sbin、/usr/local/bin の意味は何ですか?

  1. 例を含むwcLinuxコマンド

  2. ファイル列を選択するための 10 の実用的な Linux カット コマンドの例

  3. Linux での cut コマンドの例