管道命令
阅读数:85 评论数:0
跳转到新版页面分类
Linux
正文
一、选取命令
1、cut
在 Linux 中,cut
命令是一个文本处理工具,它用于从文件或标准输入中提取文本列。cut
命令可以根据列、字符或字段分隔符来选择文本。
cut
命令非常适合用于提取表格数据或由分隔符分隔的文本数据的列。由于 cut
只能按照固定的分隔符或字符位置来选择文本,它在处理复杂格式的文本时可能不如 awk
或 sed
等工具灵活。但是,由于其简单性,在执行基本的文本列提取任务时,cut
是一个非常快速且有效的工具。
(1)使用方法
cut
命令的基本语法如下:
cut OPTION... [FILE]...
其中 OPTION
可以是以下几种:
-b
(--bytes):按字节位置选择。-c
(--characters):按字符位置选择。-d
(--delimiter):指定字段分隔符,默认是制表符。-f
(--fields):按字段选择,与-d
选项一起使用。--complement
:选择未被-b
、-c
或-f
选项选中的内容。
(2)示例
- 按字符选择
echo "Hello, World!" | cut -c 1-5
这会输出 Hello
,因为它选择了第 1 到第 5 个字符。
- 按字节选择
echo "Hello, World!" | cut -b 1-5
这也会输出 Hello
,但是如果处理多字节字符,结果可能会有所不同。
- 按字段选取
假设你有一个以逗号分隔的 CSV 文件 data.csv
,你可以使用以下命令提取第二列的内容:
cut -d, -f2 data.csv
- 选择除某些字段之外的所有内容
如果你想选择除第一列之外的所有列,可以使用 --complement
选项:
cut -d, --complement -f1 data.csv
这将输出 data.csv
文件中除第一列以外的所有列。
2、grep
grep
是 Linux 和 UNIX 系统上的一个强大的文本搜索工具,它用于搜索一个或多个文件中匹配指定模式的行,并输出。这个命令名来源于全局正则表达式打印(global regular expression print)。
(1)基本用法
grep [-acinv] [--color=auto] '查找的字符串' filename
-a:将binary文件以text文件的方式查找数据
-c:计算找到‘查找字符串’的次数
-i:忽略大小写的不同
-n:顺便输出行号
-v:反向选择
--color=auto:可以将找到的关键字以加色显示
(2)使用正则表达式
使用 -E
选项可以启用扩展的正则表达式:
grep -E "pat+ern" filename
(3)递归搜索
使用 -r
或 -R
选项可以递归地搜索目录中的所有文件:
grep -r "pattern" /path/to/directory
(4)只输出匹配文本的部分
使用 -o
选项只输出匹配模式的部分,而不是整行内容:
grep -o "pattern" filename
二、排序
1、sort
在 Linux 中,sort
命令用于对文件中的行进行排序。它可以根据文本、数字、月份等进行排序,并支持逆序排序。sort
命令可以处理来自文件的输入,也可以处理来自管道的输入。
(1)基本用法
sort [-fbMnrtuk] [file or stdin]
-f:忽略大小写的差异
-b:忽略最前面的空格符部分
-M:以月名字来排序
-n:使用“纯数字”进行排序
-r:反向排序
-u:相同的数据,仅出现一行
-t:分隔符,默认以tab
-k:以哪个区间来进行排序
(2)检查文件是否已排序
sort -c filename
使用 -c
或 --check
选项可以检查文件是否已经排序。如果文件未排序,sort
会输出第一个乱序的行并退出。
(3)合并多个已排序的文件
sort -m file1 file2
(4)根据列排序
sort -k2 filename
使用 -k
选项可以指定根据第几列进行排序。上面的命令将根据第二列的内容排序。
(5)指定分隔符并排序
sort -t: -k3n /etc/passwd
在这个例子中,-t:
选项指定冒号为字段分隔符,-k3n
选项指定按照第三列的数字值进行排序。
(6)稳定排序
sort -s filename
使用 -s
或 --stable
选项可以执行稳定排序,即对于相等的行,保持它们在文件中的原有顺序。
2、uniq
uniq
是一个在 Linux 和类 Unix 系统中用来过滤或报告重复行的命令行工具。它通常与 sort
命令一起使用,因为 uniq
需要输入数据已经是排序过的,以便它能够检测和处理连续的重复行。
(1)基本用法
uniq [-ic]
-i:忽略大小写字符的不同
-c:进行统计
(2)只显示重复的行
uniq -d filename
使用 -d
选项,uniq
将只显示输入中那些重复的行。
(3)只显示那些在输入文件中仅出现一次的行
uniq -u filename
使用 -u
选项,uniq
将只显示那些唯一的行。
(4)跳过多个字段
uniq -f N filename
使用 -f N
选项,uniq
将跳过每行开头的 N 个字段。
(5)跳过多个字符
uniq -s N filename
(6)比较指定字符数
uniq -w N filename
使用 -w N
选项,uniq
将只比较每行开头的 N 个字符。
3、wc
在 Linux 系统中,wc
(word count) 命令用于计算文本文件中的行数、单词数和字节数。这个命令在文本处理和统计信息时非常有用。
(1)基本用法
wc [-lwm]
-l:仅列出行
-w:仅列出多少字
-m:仅列出多少字符
(2)只计算字节数
wc -c filename
使用 -c
选项,wc
将只输出字节数。
(3)计算最长行的长度
wc -L filename
使用 -L
选项,wc
会输出文件中最长行的长度。
三、双向重定向tee
在 Linux 中,tee
命令读取标准输入,并将其内容写入标准输出和一个或多个文件。这样,您可以同时查看数据并将其保存到文件中。tee
命令经常与管道 (|
) 一起使用,以便在将输出传递给另一个命令的同时,还能保存中间结果。
1、基本用法
tee [-a] file
-a:以append的方式将数据添加到file当中
四、字符转换命令
1、tr
在 Linux 中,tr
是一个非常有用的命令行工具,用于转换或删除字符串中的字符。它的名称来自 "translate" 或 "transliterate",表示它可以用来将字符集转换成另一个字符集。tr
只接受标准输入(stdin)作为输入,并将结果输出到标凈输出(stdout)。
以下是一些 tr
命令的基本用法:
(1)替换字符:将输入中的字符替换为另一个字符。
echo "hello world" | tr 'a-z' 'A-Z'
这个命令将所有小写字母转换为大写字母,输出 "HELLO WORLD"。
(2)删除字符:从输入中删除所有出现的指定字符。
echo "hello world" | tr -d 'a-e'
这个命令删除所有 'a' 到 'e' 的字符,输出 "hllo world"。
(3)压缩字符:将输入中连续出现的字符压缩为一个字符。
echo "hello world" | tr -s ' '
这个命令将连续的空格压缩为单个空格,输出 "hello world"。
(4)删除指定字符外的所有字符:保留输入中的某些字符,删除其他所有字符。
echo "hello 1 world 2" | tr -cd '0-9 \n'
这个命令删除除了数字、空格和换行符以外的所有字符,输出 "1 2"。
(5)字符类:tr
也支持字符类,如 [:digit:]
表示所有数字,[:lower:]
表示小写字母等。
echo "Hello 123 World" | tr -d '[:lower:]'
这个命令删除所有小写字母,输出 "H 123 W"。
tr
命令只能用于处理单行输入;它不理解字段或记录。此外,tr
不支持使用文件名作为输入或输出,它需要通过管道来接收数据或者输出数据到其他命令。
2、col
col
命令的基本功能包括:
- 转换制表符为适当数量的空格(使得输出可以正确地显示在终端上)。
- 删除不必要的空格字符(例如,将多个空格转换为单个空格)。
- 将反向换行(即上移的控制字符)转换为正向换行。
这里有一些 col
命令的基本用法示例:
(1)过滤控制字符:将含有控制字符的文件转换为文本文件。
cat file_with_control_chars.txt | col -b > cleaned_file.txt
这个命令使用 -b
选项来过滤掉所有的退格字符。
(2)处理制表符和空格:将制表符转换为正确数量的空格。
cat file_with_tabs.txt | col > output.txt
这里没有指定选项,col
默认会将制表符转换为空格。
(3)处理垂直移动:处理文件中的垂直移动控制字符。
cat file_with_vertical_movements.txt | col -x > output.txt
-x
选项会将垂直控制字符转换为换行符。
col
命令在处理旧式打印机或终端输出的文档时特别有用,这些文档可能包含了许多用于格式化的特殊控制字符。在现代系统中,col
的使用可能不如以前广泛,但在某些特定情况下,如处理遗留文档或脚本输出时,它仍然很有价值。
3、join
在 Linux 中,join
命令是一个文本处理工具,它用于将两个文件中具有相同的连接字段的行合并在一起。这类似于 SQL 中的 JOIN 操作,可以用来结合来自不同来源的相关数据。
要使用 join
命令,两个输入文件必须是根据连接字段排序的。join
默认情况下使用空格作为字段分隔符,并且默认连接的是两个文件的第一个字段。
(1)基本用法
join [-ti12] file1,file2
-t:默认以空格符分隔数据,并且对比“第一个字段”的数据,如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个
-i:忽略大小写的差异
-1:数字1,表示第一个文件 要用哪个字段来分析
-2:表示第二个文件要用哪个字段来分析
(2)指定连接字符:可以指定用于连接的字段。
join -1 2 -2 3 file1.txt file2.txt
这里 -1 2
指定使用 file1.txt
的第二个字段作为连接字段,-2 3
指定使用 file2.txt
的第三个字段。
(3)指定输出字段:选择输出哪些字段。
join -o 1.1,2.2 file1.txt file2.txt
这里 -o
选项指定输出 file1.txt
的第一个字段和 file2.txt
的第二个字段。
(4)改变字段分隔符:指定字段分隔符。
join -t ',' file1.txt file2.txt
-t ','
指定逗号作为字段分隔符。
(5)处理无匹配行:输出那些在另一个文件中没有匹配的行。
join -a 1 file1.txt file2.txt
join -a 2 file1.txt file2.txt
-a 1
选项将输出 file1.txt
中所有的行,即使它们在 file2.txt
中没有匹配;-a 2
对 file2.txt
做同样的事情。
(6)同时输出无匹配的行:同时输出两个文件中无匹配的行。
join -a 1 -a 2 file1.txt file2.txt
4、paste
在 Linux 系统中,paste
命令用来并排合并两个或多个文件的行。它简单地将每个文件的对应行连接起来,而不像 join
命令那样需要基于匹配的字段来合并行。paste
命令通常用于将数据列组合在一起。
(1)合并两个文件的内容:将两个文件的内容合并在一起,每个文件的对应行由制表符分隔。
paste file1.txt file2.txt
(2)更改字段分隔符:使用 -d
选项来指定一个不同的字段分隔符,比如逗号。
paste -d, file1.txt file2.txt
(3)并排合并多个文件:一次合并多个文件。
paste file1.txt file2.txt file3.txt
(4)序列化文件内容:使用 -s
选项将文件的行序列化,这样文件中的每行将依次排列,而不是并排。
paste -s file1.txt
(5)使用多个分隔符:-d
选项可以指定一个分隔符列表,paste
会轮流使用这些分隔符。
paste -d',|' file1.txt file2.txt
5、expand
在 Linux 中,expand
命令用于将输入文件中的制表符(通常显示为 ^I
或 TAB
)转换为空格。这可以帮助统一文件格式,特别是在文本编辑器或查看工具中制表符的显示宽度可能不一致的情况下。
(1)指定空格的数量:使用 -t
选项来指定每个制表符应转换成多少个空格。以下命令将每个制表符转换为4个空格。
expand -t 4 file.txt
(2)使用多制表位:可以指定一个制表位列表,制表符将被扩展到下一个制表位位置。
expand -t 2,8,14 file.txt
五、split
在 Linux 中,split
命令用于将大文件分割成多个较小的文件。这个命令在处理大型日志文件或需要将文件分割为特定大小以便于传输时特别有用。
1、基本用法
spli [-bl] file PREFIX
-b:后面可接欲切割的文件大小,可加单位:b,k,m等。
-l:以行数来进行切割
PREFIX 是生成的小文件的前缀,默认为 x。
2、使用后缀长度:指定输出文件的后缀长度。
split -a [长度] [原始文件]
六、参数替换xargs
在 Linux 中,xargs
是一个非常强大的命令行工具,它可以将标准输入(stdin)数据转换为命令行参数。xargs
读取来自标准输入的数据,通常是一行文本,并将其传递给其他命令作为参数。
1、基本用法
xargs [-0epn] command
-0:如果输入含有特殊字符,这个参数可以将它还原成一般字符
-e:后面可以接字符串,当xargs分析到这个字符串时,就会停止
-p:在执行每个命令的参数时,都会询问用户意思
-n:后面接次数,
2、从文件读取数据:
将文件中的每一行作为参数传递给命令。
cat file.txt | xargs [COMMAND]
3、限制命令的参数数量:-n
选项可以限制每次命令调用时使用的参数数量。
cat file.txt | xargs -n [NUMBER] [COMMAND]
4、并行执行命令:-P
选项可以指定并行执行的命令数。
cat file.txt | xargs -P [NUMBER] -n [NUMBER] [COMMAND]
5、使用自定义分隔符:-d
选项可以指定一个自定义的分隔符。
echo "a,b,c" | xargs -d ',' [COMMAND]
6、提示用户确认执行命令:-p
选项在执行每个命令之前提示用户确认。
echo "example.txt" | xargs -p rm
七、关于减号-
在管道中,stdin和stdout可以利用减号来替代。