命令 | 说明 |
---|---|
cut | 用于选取文本中的某一部分并输出 |
sort | 将文本内容按行排序 |
uniq | 用于去重,删除文本中的重复行 |
split | 将一个大文件分割成小文件 |
tr | 用于字符替换 |
grep | 用于在文本中查找某个字符串 |
wc | 统计文本行数、单词数、字符数等 |
tee | 将数据输出到文件同时输出到屏幕 |
xargs | 用来将标准输入转换成命令行参数 |
nl | 用于为文本文件的每一行编号 |
命令详解
cut
cut命令的语法结构如下:
cut [OPTIONS] [FILE]
常用选项包括:
-
c
:--characters: 按字符切割 -
f
: --fields: 按字段切割 -
d
: --delimiter: 指定分隔符
下面是一些实例:
从文件中提取第 2 列:cut -f 2 FILENAME
从文件中提取前 10 个字符:cut -c 1-10 FILENAME
指定分隔符提取第 3 列:cut -d "," -f 3 FILENAME
区域说明:
m- :选择第m到最后的区域
m-n:选择m到n的区域
-n:从第一个到n的区域
注意事项:
如果不指定选项,则默认按照 f 选项处理。
当指定了 c 选项时,列的编号是基于字符计算的,而不是基于字段。
如果指定了 d 选项,但是没有指定分隔符,则默认使用制表符作为分隔符。
sort
首先来了解一下行缓冲的概念:
行缓冲
行缓冲是一种缓冲策略,它用于在程序运行时存储输入和输出操作的结果,以便在满足一定条件时将它们输出到屏幕或文件中。行缓冲的基本思想是,当程序运行时,输入和输出操作的结果会被暂存到缓冲区中,而不是立即输出到屏幕或文件中。只有当缓冲区中的数据达到一定数量或满足一定条件时,才会将缓冲区中的数据输出到屏幕或文件中。 行缓冲通常用于处理大量的输入和输出操作,以提高程序的运行效率。它可以通过设置缓冲区的大小、刷新缓冲区的条件等参数来控制缓冲区的行为。一般来说,行缓冲的刷新条件可以是缓冲区填满、写入的字符中有换行符或调用特定的函数等。 行缓冲是一种常见的缓冲策略,它在编程中有着广泛的应用。例如,在C语言中,标准输入和标准输出都是使用行缓冲进行处理的。
sort命令用于对文件内容进行排序。默认情况下,它按升序对文件内容进行排序,但也可以用于按降序排序。它可以根据整行或行内特定字段进行排序。sort命令的语法结构如下:
sort [OPTIONS] ... [FILE] ...
其中,[OPTION]是可选的选项,用于控制sort命令的行为;[FILE]是要排序的文件名,可以是单个文件名或多个文件名的列表。 sort命令支持多种选项,以下是一些常用的选项:
-
-b
:忽略每行前面开始出的空格符号。 -
-c
:检查文件是否已经排序,如果已经排序则退出,否则进行排序。 -
-d
:只处理空格,不处理其他分隔符。 -
-f
:忽略文件名大小写。 -
-i
:忽略大小写和空格。 -
-k
:按指定的列进行排序。例如,-k1,1
表示按第一列进行升序排序,-k2,2n
表示按第二列进行降序排序。 -
-m
:将多个文件合并成一个文件进行排序。 -
-o
:将排序后的结果输出到指定的文件中,而不是屏幕上。 -
-r
:按降序排序。 -
-t
:指定分隔符。例如,-t,
表示按逗号进行排序。 -
-u
:只输出唯一的行。 -
-z
:如果文件中的行以NULL字符结尾,则将它们视为单个字符。
以下是一些示例:
按升序对文件进行排序:sort FILENAME
按降序对文件进行排序:sort -r FILENAME
按数字对文件进行排序:sort -n FILENAME
根据第二个字段对文件进行排序:sort -k 2 FILENAME
请注意,如果使用了-k选项,则必须跟随字段编号或字段范围(例如 -k 2 或 -k 2,4)。
uniq
uniq命令用于从文件中删除重复行。它比较文件中相邻的行并删除重复行。默认情况下,它只会删除连续的重复行,但也可以用于删除所有重复行。uniq命令的语法结构如下:
uniq [OPTION] ... [FILE] ...
其中,[OPTION]是可选的选项,用于控制uniq命令的行为;[FILE]是要去重的文件名,可以是单个文件名或多个文件名的列表。 uniq命令支持多种选项,以下是一些常用的选项:
-
-c
:在输出重复行时,显示重复行的次数。 -
-d
:只输出重复行。 -
-f
:忽略文件名大小写。 -
-i
:忽略大小写和空格。 -
-s
:忽略指定的字符数以内的重复字符。 -
-u
:只输出唯一的行。
以下是一些示例:
-
从文件中删除连续的重复行:uniq 文件名
-
从文件中删除所有重复行:sort 文件名 | uniq
-
仅显示重复行:sort 文件名 | uniq -d
-
显示每行出现的次数:sort 文件名 | uniq -c
请注意,uniq只适用于已排序的输入。如果输入未排序,则不会删除所有重复项。
split
split 命令用于将一个大文件分割成多个小文件。这个命令比较有用,特别是当你需要将一个大文件传输或备份到一个只能处理小文件的系统中。split 命令的语法结构如下:
split [选项] 文件 [前缀]
以下是一些常用的选项:
-
b, --bytes:指定每个分割文件的大小(以字节为单位)
-
l, --lines:指定每个分割文件的行数
-
d, --numeric-suffixes:使用数字后缀代替字母后缀
-
a, --suffix-length:指定后缀的长度
以下是一些示例:
-
将文件分割成每个文件大小为 1MB 的多个小文件:split -b 1M FILENAME PREFIX
-
将文件分割成每个文件包含 100 行的多个小文件:split -l 100 FILENAME PREFIX
-
使用数字后缀而不是字母后缀分割文件:split -d FILENAME PREFIX
-
指定后缀长度为 3 位:split -a 3 FILENAME PREFIX
请注意,如果不指定前缀,split 命令将使用默认前缀 x。
tr
tr 命令用于字符替换。它可以将输入中的一组字符替换为另一组字符。tr 命令的语法结构如下:
tr [选项] SET1 [SET2]
以下是一些常用的选项:
-
d
, --delete:删除 SET1 中的字符而不是替换它们 -
s
, --squeeze-repeats:将连续重复的字符替换为单个字符 -
c
, --complement:替换 SET1 中未包含的字符
以下是一些示例:
-
将所有大写字母转换为小写字母:tr 'A-Z' 'a-z'
-
将所有空格替换为制表符:tr ' ' '\t'
-
删除所有数字:tr -d '0-9'
-
将多个相邻空格替换为单个空格:tr -s ' '
请注意,如果不指定 SET2,则默认替换为空字符。
grep
grep 命令用于在文件中查找包含某个字符串的行。它可以用于在单个文件或多个文件中搜索字符串。grep 命令的语法结构如下:
grep [选项] PATTERN [FILE]
以下是一些常用的选项:
-
i
, --ignore-case:忽略大小写进行匹配 -
r
, --recursive:递归搜索目录中的文件 -
w
, --word-regexp:只匹配整个单词,而不是部分匹配 -
n
, --line-number:显示匹配行的行号 -
v
, --invert-match:显示不匹配的行 -
c
:只输出匹配的行数。
以下是一些示例:
-
在文件中查找字符串 "hello":grep hello FILENAME
-
在目录及其子目录中查找字符串 "world":grep -r world DIRECTORY
-
只查找整个单词 "cat":grep -w cat FILENAME
-
显示匹配行的行号:grep -n hello FILENAME
-
显示不匹配的行:grep -v hello FILENAME
为什么执行管道操作,和对文件直接输出这两种操作时间相差这么大?
执行grep相比输出在终端上,有以下两种优势:
-
数据没有被传输到本地,即没有进行网络传输。(网络传输)
-
不需要将文件输出在屏幕上(文件)
解释:grep是内存中的缓冲空间,没有进行文件的IO操作。
wc
wc 命令用于统计文本文件的行数、单词数、字符数等。wc 命令的语法结构如下:
wc [选项] [文件名]
以下是一些常用的选项:
-
l, --lines:只显示行数
-
w, --words:只显示单词数
-
c, --bytes:只显示字符数
-
m, --chars:只显示字符数,包括换行符
以下是一些示例:
-
统计文件中的行数、单词数和字符数:wc FILENAME
-
只显示文件中的行数:wc -l FILENAME
-
只显示文件中的单词数:wc -w FILENAME
-
只显示文件中的字符数:wc -c FILENAME
tee
tee 命令用于将输入复制到标准输出和一个或多个文件中。它可以用于同时输出到终端和文件中。tee 命令的语法结构如下:
command | tee [选项] [文件名]
以下是一些常用的选项:
-
-a
:在输出文件中添加内容。 -
-i
:忽略大小写。 -
-s
:只输出唯一的行。
以下是一些示例:
-
将命令的输出同时输出到终端和文件中:command | tee FILENAME
-
将命令的输出追加到文件中:command | tee -a FILENAME
xargs
xargs 命令用于将标准输入转换为命令行参数。它可以将一系列输入作为单个命令的参数,从而避免达到命令行参数的最大限制。
xargs 命令的语法结构如下:
command | xargs [选项] [命令]
以下是一些常用的选项:
-
I, --replace:用输入中的每一行替换命令中的字符串 {}
-
n, --max-args:每次运行命令时使用的最大参数数
-
0, --null:使用 null 字符而不是换行符作为分隔符
-
-e'EOF':指定参数代换的结束符
-
-p:执行前询问
以下是一些示例:
-
将输入作为命令参数运行命令:echo "hello world" | xargs command
-
将输入中的每一行作为参数运行命令:cat FILENAME | xargs command
-
使用输入中的每一行替换命令中的字符串 {}:cat FILENAME | xargs -I {} command {}
请注意,如果输入中包含空格或其他特殊字符,则需要使用引号或转义字符来包含参数。
nl
nl
用于为文本文件的每一行编号。nl
命令的基本用法是:nl [options] filename
。其中,filename
是要编号的文本文件。 nl
命令的一些常用选项包括:
-
-n
:表示按照行数编号,而不是按照字节编号。 -
-w
:表示按照指定的宽度编号。例如,nl -w 5 filename
将为每一行分配5个数字。 -
-b
:表示按照字节编号。
例如,如果要为一个名为file.txt
的文本文件的每一行编号,可以使用以下命令:
nl file.txt
这将为file.txt
的每一行分配一个行号,并输出到标准输出。例如:
1 hello 2 world 3 this 4 is 5 a 6 test
nl
命令可以用于对文本文件进行格式化或排版,特别适用于需要对文件的每一行进行编号的情况。