目录
一、简介
重定向输入:
是一种将程序或命令的输入从默认的位置(如键盘或终端)改为来自文件或其他来源的过程。通常情况下,程序或命令从终端接收用户输入,但通过重定向输入,我们可以将输入从文件中读取,而不需要手动键入。
在大多数操作系统和命令行界面中,使用特定的符号来实现输入重定向。常见的输入重定向符号是 `<`。
下面是一些示例用法:
1. `command < file.txt`:将命令的输入从文件 `file.txt` 中读取。
2. `command1 | command2 < file.txt`:将命令 `command1` 的输出通过管道传递给 `command2`,同时将 `command2` 的输入从文件 `file.txt` 中读取。
通过使用输入重定向,我们可以方便地将预先准备好的文件内容作为命令或程序的输入,而不需要手动逐行输入。这在处理大量输入数据、自动化操作或批量处理任务时非常有用。同时,输入重定向还可以与其他操作符(如输出重定向和管道)结合使用,以实现更复杂的输入输出操作和数据处理。
重定向输出:
是一种将程序或命令的输出从默认的位置(如终端或控制台)转移到其他位置或文件的过程。通常情况下,程序或命令的输出会直接显示在终端或控制台上,但通过重定向输出,我们可以将其输出到文件中或其他地方进行处理或保存。
在大多数操作系统和命令行界面中,使用特定的符号来实现输出重定向。下面是一些常见的符号用法:
1. `>`:将输出重定向到一个文件,并覆盖该文件的内容。例如:`command > file.txt`。
2. `>>`:将输出附加到一个文件的末尾,而不会覆盖原有内容。例如:`command >> file.txt`。
3. `2>`:将错误输出重定向到一个文件。例如:`command 2> error.txt`。
4. `&>`:将标准输出和错误输出都重定向到一个文件。例如:`command &> output.txt`。
通过使用这些重定向符号,我们可以将程序或命令的输出导向到文件中,以便日后查看、分析或进行其他操作。此外,输出重定向还可以将输出发送到其他程序或设备,以实现各种操作和用途。
过滤器:
在计算机科学中,过滤器(Filter)是指一种用于处理数据流或输入数据,并根据特定条件筛选、转换或操作数据的组件或程序。过滤器通常被用于从输入数据中选择、删除或修改特定的元素或信息,以便获得所需的结果。
过滤器可以执行各种不同的操作,包括但不限于以下几种:
1. 数据筛选:过滤器可以基于条件来筛选输入数据,选择满足特定条件的数据项。例如,可以使用过滤器从一组数字中选择所有大于某个阈值的数字。
2. 数据转换:过滤器可以对输入数据进行转换,将其转换为不同的数据格式或表示形式。例如,可以使用过滤器将输入的文本数据中的大写字母转换为小写字母。
3. 数据修剪:过滤器可以删除或修剪输入数据中的无关信息或不需要的部分。例如,在处理日志文件时,可以使用过滤器删除其中的注释或空白行。
4. 数据增强:过滤器可以添加或修改输入数据,以增强其内容或性质。例如,可以使用过滤器在图像数据中应用滤镜或图像处理算法,以改变其外观或增强其特征。
过滤器通常作为数据处理管道中的一部分使用,用于处理、转换或净化输入数据以满足特定的需求。它们在数据处理、文本分析、图像处理、网络安全等许多领域都有广泛的应用。
管道:
在计算机科学中,管道(Pipe)是一种用于连接多个程序或进程的通信机制,允许数据在它们之间以流的方式传递。通过使用管道,一个程序的输出可以直接作为另一个程序的输入,实现数据的连续传输和处理。
管道通常用于将多个简单的程序组合成一个更复杂的处理流程,每个程序负责特定的任务或转换操作。每个程序接收前一个程序的输出作为输入,并将自己的输出传递给下一个程序,这样数据就可以在各个程序之间流动。
在操作系统和命令行界面中,管道使用竖线符号 `|` 表示。例如, `command1 | command2` 表示将 `command1` 的输出作为 `command2` 的输入。
管道的一些特点和应用包括:
1. 节省内存:通过使用管道,数据可以逐个元素地流过处理程序,而不需要一次性将整个数据集加载到内存中。这样可以节省大量的内存空间,特别是在处理大量数据时。
2. 实现数据流处理:管道允许数据以流的方式被处理,而不需要等待整个数据集就绪。这对于实时数据处理和连续流数据非常有用,如日志处理、数据清洗和实时监控等场景。
3. 模块化和可组合性:通过将多个程序连接起来,可以实现模块化和可组合的数据处理流程。这样可以将复杂任务分解为多个较小的、可复用的部分,并将它们通过管道连接起来。
4. 各种数据处理操作:管道可以用于各种数据处理任务,如数据过滤、数据转换、数据聚合、数据分析等。它们可以组合使用不同的程序来实现特定的数据处理需求。
总之,管道是一种强大的通信和数据处理机制,它可以实现程序之间的数据传输和流程控制,简化复杂任务的实现,提高代码的可读性和可维护性。
二、使用详解
1、标准的输入输出
1.1、标准输入文件:当我们执行需要输入的命令时,shell翻译命令会将我们的键盘作为默认的输入源,键盘也就称之为标准输入文件
案例:使用cat命令时,cat命令的后边接一个文件名时,会显示文件中的所有行。如果没有文件名,cat命令会从标准输入文件获得其输入(root用#号提示符,普通用户则是用$提示符)
1.2、标准输出文件
在Linux中,shell将显示器作为其执行的任何命令的默认输出设备。显示器被称之为标准输出文件
案例:发出ls命令时,shell执行命令并将其输出(即目录列表)发送到标准输出文件(文件描述符0表示标准输入文件,文件描述符1则表示标准输出文件,文件描述符2则描述标准错误文件)
1.3、标准错误文件
shell实用程序在显示器上显示错误信息。错误信息的原因可能有很多种,比如,输入无效指令或者用户没有权限的执行,因而显示器也是标准错误文件。
2、重定向(同样也是三种)
类型 | 描述 |
---|---|
输入重定向,也可以加上文件描述符0 | 输入重定向是一种将文件内容或者命令的输出作为程序的输入的方式。它使用符号 `<` 将文件内容或者命令的输出连接到程序。 以下是一些输入重定向的案例: 1. 从文件读取输入: 2. 从命令输出读取输入: 3. 从多个文件读取输入: 输入重定向允许我们从文件或者其他命令输出中获取输入数据,从而在程序中处理大量的输入信息。这对于自动化脚本、批处理任务以及处理大型数据集非常有用。 |
输出重定向,也可以加上我们的文件描述符1 | 输出重定向是一种将程序的输出结果发送到其他地方而不是默认的终端显示的方式。在 Linux 或类 Unix 操作系统中,我们可以使用输出重定向将程序的输出重定向到文件、其他命令或者通过网络传输。输出重定向使用特殊的符号 `>` 或 `>>` 来指定输出的目标。 以下是一些输出重定向的案例: 1. 输出到文件: 2. 输出到命令管道: 3. 输出到网络或其他设备: 这些只是输出重定向的一些示例,它有很多用途和灵活性,可以根据具体需求来使用。输出重定向使我们能够将程序的输出保存、处理或传输到其他地方,方便进行后续的操作和分析。 |
错误重定向,2>符号表示 | 错误重定向是一种将程序的错误输出(通常是标准错误流)重定向到指定位置的方式。在 Linux 或类 Unix 操作系统中,我们可以使用错误重定向将程序的错误信息发送到文件或丢弃它们。 以下是一些错误重定向的案例: 1. 将错误输出重定向到文件: 2. 将错误输出追加到文件: 3. 丢弃错误输出: 错误重定向允许我们将程序的错误信息重定向到指定位置,这样我们可以方便地保存错误日志或者忽略它们。这在调试、日志记录或构建自动化流程时非常有用。 |
追加 | 1. 使用 `echo` 命令追加内容: 2. 使用 `cat` 命令追加内容: 3. 使用 `tee` 命令追加内容: |
输入重定向案例:
输出重定向案例:
错误重定向案例:
3、过滤器
过滤器是一个程序,从标准输入文件输入文件获得输入、处理(或过滤)它并输出发送到标准输出文件。
3.1、grep过滤器
在 Linux 中,`grep` 命令是用于搜索和过滤文件内容的工具。它支持多种正则表达式来进行模式匹配和过滤。grep过滤器搜索文件中特定样式的字符并显示包含那个样式的所有行。在文件中搜索的此样式被称为正则表达式。grep过滤器在不指定正则表达式的情况下无法使用(默认指定的时基本正则表达式)。
使用语法:
grep [option(s)] pattern [filename]
grep命令中的文件名是可选的。如果没有文件名,grep等待标准输入。输入一行后,grep在行中搜索正则表达式,如果包含该特定表达式就显示此行。用户指示输入结束时(Ctrl + d),执行才结束。
下面是一些常用的正则表达式语法:
字符 | 用法 | 示例 | 描述 |
---|---|---|---|
’【】‘ | 与一组字符中的任意一个进行匹配 | grep "New[abc]" | 将搜索样式指定为‘Newa','Newb','Newc' |
’【-】‘ | 表示一个范围内的字符匹配 | grep "test[a-c]" | 将搜索样式指定为testq,testb,testc |
’^‘ | 匹配行的起始位置 | grep "^New[abc]" | 将搜索样式指定为’Newa','Newb','Newc‘出现在行首的匹配项 |
’$‘ | 匹配行的结束位置 | grep "New[abc]$" | 将搜索样式指定为’Newa','Newb','Newc‘出现在行末尾的匹配项 |
’[^]‘ | 用于字符串集的否定 | grep "New[^a-b]" | 搜索包含词’New'后接除了a、b、c的任意字符的样式 |
`.` | 匹配除换行符外的任意字符 | grep "New.[abc[" | 指定包含词“New”后接‘a'、’b'、‘c’中任意字符的样式 |
`*` | 匹配前面的字符零次或多次 | grep "New*" | 指定以New开头的匹配项 |
`\` | 用于转义特殊字符 | grep "New\.\[abc\]" | 指定搜索样式【New.[abc]】,其中点.和【abc】都仅表示普通的字符含义 |
grep过滤器选项,用于更改命令的输出。
参数选项 | 描述 |
---|---|
-n | 打印与样式匹配的每行及其行号,行号打印在行首 |
-c | 打印与样式匹配的行数 |
-v | 打印与正则表达式指定的样式不匹配的所有行 |
案例:
3.2、wc过滤器
用于计算磁盘文件或者标准输入文件中的行数、字数和字符数,如果没有文件名,同样也是跟我们的grep过滤器操作一样
使用语法:
wc [option] [filename],其中的默认选项包括以下的三个
wc过滤器的选项
选项 | 描述 |
---|---|
-l(line) | 显示行数 |
-w(word) | 显示词数 |
-c(char) | 显示字符数 |
案例:
3.3、cut过滤器
当需要从特定命令(例如ls和who)的输出抽取特定列时可以使用我们的cut过滤器
使用语法:
cut [options] [filename]
使用参数选项
选项 | 描述 |
---|---|
-f <column_number(s)> | 显示指定列 |
-c <character_numbers(s)> | 显示指定字符 |
-d<column_delimiter> | 指定列定界符。tab是默认列定界符 |
案例:
3.4、sort过滤器
sort过滤器按升序排列标准输入中的每行。需要输入sort命令,然后输入sort命令,然后输入想要排序的数据,接着需要按Ctrl + d键来排列数据
选项 | 描述 |
---|---|
-r | 按反序(降序)排序输入 |
-f | sort过滤器以字符的ASCII码(A~Z--->65~90,a~z---->97~122),数字0~9的值比大小字母A~Z的值小 |
-n | 以非ASCII顺序排列数字 |
<filename> | 排序指定文件的内容,默认情况下,文件是以升序排列 |
+pos1 -pos2 | 以特定列的顺序排序文件 |
-t | 基于特定列分隔符排序文件 |
-o | 将sort过滤符的输出保存在磁盘文件上 |
案例:
-f选项
4、管道
4.1、认识管道
Linux具有组合过滤器和其他命令(例如Is)的功能,通过这种方式过滤器或命令的标准输出可以作为标准输入发送给另一个过滤器或命令,管道符用 | 表示。指示shell将“ | ”之前的命令的输出作为输入发送到之后的命令。
4.2、使用管道
观察下面的操作,管道符 | 相当于省去了中间件的操作,之间作为一个缓冲区
4.3、案例实操
在 Linux 中,`tr` 命令是用于字符转换或删除字符的工具。它可以执行简单的字符替换、删除和压缩等操作。以下是 `tr` 命令的使用方法和示例:
基本语法:
```
tr [选项] SET1 [SET2]
```常用选项:
- `-d`:删除指定字符。
- `-s`:将连续重复的字符压缩为一个字符。示例:
1. 替换字符:
- 将文件中的所有小写字母转换为大写字母:`tr 'a-z' 'A-Z' < input.txt`
- 将文件中的所有数字替换为 `#`:`tr '0-9' '#' < input.txt`
2. 删除字符:
- 删除文件中的所有空格字符:`tr -d ' ' < input.txt`
- 删除文件中的所有数字:`tr -d '0-9' < input.txt`
3. 压缩字符:
- 压缩文件中的连续重复字符为一个字符:`tr -s '[:space:]' < input.txt`
- 压缩文件中的连续重复数字为一个数字:`tr -s '0-9' < input.txt`4. 使用字符集:
- 将所有的 `a` 替换为 `A`,将所有的 `b` 替换为 `B`:`tr 'ab' 'AB' < input.txt`
- 将字母字符替换为 `#`,将数字字符替换为空格:`tr '[:alnum:]' '#' < input.txt | tr '[:digit:]' ' '`注意:`SET1` 和 `SET2` 可以使用字符、字符集、转义序列等来表示。例如,`'a-z'` 表示所有小写字母,`'[:digit:]'` 表示所有数字字符。
这是一些常见的 `tr` 命令的用法示例。`tr` 命令的功能简单但强大,可用于处理文本数据中的字符转换和删除操作。更多详细的使用方式和选项,可以通过 `man tr` 命令查看 `tr` 命令的帮助文档。
显示文件所有者有执行权限的当前目录中的普通文件名,需要提供以下命令
ls -l | grep "^-..x" | tr -s " " | cut -d " " -f9
ls -l命令的输出被作为grep命令的输入,ls -l命令给出了当前目录中文件的详细列表
grep命令抽取所有具有执行权限的普通文件,此输出被传递到tr命令,用一个空格替换多个连续空格
cut命令将它作为输入,并抽取和显示第9个字段,也就是文件
要逐页显示当前目录中的文件名和文件大小
ls -l | tr -s " " | cut -d " " -f9,5