在Linux中cut命令
Linux和Unix系统中有许多实用程序,可让我们处理和过滤文本文件。
“ cut”是一个命令行实用程序,可让我们从指定的文件或者管道数据中剪切部分行,并将结果打印到标准输出中。
它可用于通过定界符,字节位置和字符来剪切行的一部分。
在本教程中,我们将通过实际示例和最常见选项的详细说明,向我们展示如何使用“ cut”命令。
如何使用“cut”命令
“ cut”命令的语法如下:
cut OPTION... [FILE]...
指示“cut”在剪切出选定部分时是使用定界符,字节位置还是字符的选项,这些行如下所示:
- '-f'('--fields = LIST')-通过指定一个字段,一组字段或者一系列字段进行选择。这是最常用的选项。
- '-b'('--bytes = LIST')-通过指定一个字节,一组字节或者字节范围进行选择。
- '-c'('--characters = LIST')-通过指定一个字符,一组字符或者一系列字符进行选择。
我们可以使用上面列出的选项之一,并且只能使用其中之一。
其他选项是:
- '-d'('--delimiter')-指定将使用的定界符,而不是默认的“ TAB”定界符。
- '--complement'-补充选择。使用此选项时,“剪切”显示除所选内容外的所有字节,字符或者字段。
- '-s'('--only-delimited')-默认情况下,'cut'打印不包含分隔符的行。使用此选项时,“剪切”不会打印不包含定界符的行。
- '--output-delimiter'-'cut'的默认行为是使用输入定界符作为输出定界符。此选项使我们可以指定其他输出定界符字符串。
“cut”命令可以接受零个或者多个输入文件名。
如果未指定“ FILE”,或者当“ FILE”为“-”时,“ cut”将从标准输入中读取。
传递给'-f','-b'和'-c'选项的'LIST'参数可以是整数,多个逗号分隔的整数,一个整数范围或者多个逗号分隔的整数范围。
每个范围可以是以下之一:
- 'N'第N个字段,字节或者字符,从1开始。
- 从第N个字段,字节或者字符到行尾的'N-'。
- 从第N到第M的“ N-M”字段,字节或者字符。
- 从第一个到第M个字段,字节或者字符为“ -M”。
如何按字段剪切
要指定应剪切的字段,请使用“ -f”选项调用该命令。
未指定时,默认定界符为“ TAB”。
在下面的示例中,我们将使用以下文件。
这些字段由制表符分隔。
test.txt
245:789 4567 M:4540 Admin 01:10:1980 535:763 4987 M:3476 Sales 11:04:1978
例如,要显示第一个和第三个字段,请使用:
cut test.txt -f 1,3
245:789 M:4540 535:763 M:3476
或者,如果要显示从第一到第四字段:
cut test.txt -f -4
245:789 4567 M:4540 Admin 535:763 4987 M:3476 Sales
如何基于定界符进行剪切
要基于定界符进行剪切,请在调用“ -d”选项后调用我们要使用的定界符。
例如,要使用“:”作为分隔符来显示第一和第三字段,请输入:
cut test.txt -d ':' -f 1,3
245:4540 Admin 01 535:3476 Sales 11
我们可以使用任何单个字符作为分隔符。
在下面的示例中,我们使用空格字符作为分隔符并打印第二个字段:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum
如何补充选择
要补充选择字段列表,请使用'--complement'选项。
这将仅打印那些未使用“ -f”选项选择的字段。
以下命令将打印除第一个和第三个以外的所有字段:
cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980 4987 Sales 11:04:1978
如何指定输出定界符
要指定输出定界符,请使用'--output-delimiter'选项。
例如,要将输出定界符设置为“ _”,可以使用:
cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540 535:763_M:3476
如何减少字节和字符
在进一步说明之前,我们先区分一下字节和字符。
一个字节为8位,可以表示256个不同的值。
建立ASCII标准后,它考虑了使用英语所需的所有字母,数字和符号。
ASCII字符表有128个字符,每个字符用一个字节表示。
当计算机开始在全球范围内可用时,科技开始引入针对不同语言的新字符编码。
对于具有超过256个字符的语言,不可能实现简单的1对1映射。
这导致了诸如共享文档或者浏览之类的不同问题,因此需要一种能够处理世界上大多数书写系统的新Unicode标准。
创建UTF-8就是为了解决这些问题。
在UTF-8中,并非所有字符都用1个字节表示。
字符可以用1个字节到4个字节来表示。
'-b'('--bytes')选项告诉命令从给定字节位置指定的每一行中剪切节。
在以下示例中,我们使用占用2个字节的'ü'字符。
选择第5个字节:
echo 'drüberspringen' | cut -b 5
b
选择第5、9和13个字节:
echo 'drüberspringen' | cut -b 5,9,13
bpg
选择范围从第1到第5个字节:
echo 'drüberspringen' | cut -b 1-5
drüb
在撰写本文时,GNU coreutils中捆绑的“ cut”版本没有按字符分割的选项。
使用'-c'选项时,'cut'的行为与使用'-b'选项时相同。
切例
通常,“ cut”命令通过管道与其他命令结合使用。
这里有一些例子:
获取所有用户的列表
“ getent passwd”命令的输出传递到“ cut”,该命令使用“:”作为分隔符打印第一个字段。
getent passwd | cut -d ':' -f1
输出显示所有系统用户的列表。
查看10个最常用的命令
在以下示例中,“ cut”用于从“ history”命令输出的每一行中剥离前8个字节。
history | cut -c8- | sort | uniq -c | sort -rn | head