另请参阅:另请参阅本节中的 tac 和 cat,以及 名为文本查看工具的章节,因为它们也可以执行文本处理。
排序 文本,不带选项 sort 默认按字母顺序排序。 可以对文本文件运行以按字母顺序对其进行排序 (请注意,它也会连接文件),也可以与管道 '|' 结合使用,以对命令的输出进行排序 。
使用 sort -r 反转 排序 输出,使用 -g 选项 以“数值方式”排序 (即读取整个数字, 而不仅仅是第一位数字)。
示例
cat shoppinglist.txt | sort
上述命令将在购物 清单 上运行 cat,然后对结果进行排序 并以字母顺序显示它们。
sort -r shoppinglist.txt
上述命令将在文件上运行 sort,并以反向 字母 顺序对文件进行排序。
高级 sort 命令
sort 是一个强大的 实用工具, 这里有一些更 难学 (以及较少使用)的命令。 使用 -t 选项使用特定符号 作为分隔符 ,然后使用 -k 选项指定 要排序的列 ,其中第 1 列是分隔符 之前 的第一列。 如果数值 排序不正确,也请使用 -g 选项(不带 -g 选项,sort 仅查看数字的 第一位数字 )。 这是一个复杂的 示例
sort -t : -k 4 -k 1 -g /etc/passwd | more
这将对“/etc/passwd” 文件进行排序,使用冒号 ':' 作为分隔符。 它将通过第 4 列 (文件中的 GID 部分)进行排序,然后在该排序中,使用第一列(名称)来解决任何并列关系。 -g 在这里是为了通过完整 数字进行排序,否则它会将 4000 排在 50 之前(因为它只会查看第一位数字...)。
将两行放在一起,假设它们在相关的行上至少共享一个 共同 值 。 如果行没有共同值,则不会打印 行。
命令语法
join file1 file2
打印 选定的 行部分(文本文件的),或者,换句话说,删除 行的某些部分 。 您可能希望根据制表符 或逗号 或其他任何您能想到的内容来删除 内容...
cut 的选项:
-d --- 允许 您指定另一个分隔符, 例如 ':' 通常与 /etc/passwd 一起使用。
cut -d ':' (and probably some more options here) /etc/passwd
-f --- 此选项按列处理文本, 根据分隔符 分隔。 例如,如果您的文件包含 类似“result,somethingelse,somethingelse”的行,而您只想获取 result ,您将使用
cut -d ',' -f 1 /etc/passwd
“,”(逗号)--- 用于分隔 数字,这些允许 您剪切 特定 列。 例如
cut -d ':' -f 1,7 /etc/passwd
“-”(连字符)--- 用于显示 从第 x 行到第 y 行,例如 1-4,(将是从第 1 行到第 4 行)。
cut -c 1-50 file1.txt
x- --- 其中 x 是一个数字,表示从 “x” 剪切到末尾。
cut -5, 20-, 8 file2.txt
交互式拼写 检查文件,提示 您替换 单词或继续。aspell 据说更擅长建议 替换词,但最好 亲自 找出答案。
aspell 示例
aspell -c FILE.txt
这将在名为“FILE.txt”的特定文件上运行 aspell,aspell 将以交互方式运行并提示 用户输入。
ispell 示例
ispell FILE.txt
cat fileName.txt | tr '[A-Z]' '[a-z]' > newFileName.txt
上述命令将使用文件“fileName.txt”作为输入 并将结果输出 到“newFileName.txt”中,从而将大写字母转换为小写字母 。
cat fileName.txt | tr '[a-z]' '[A-Z]' > newFileName.txt
上述命令将使用文件“fileName.txt”作为输入 并将结果输出 到“newFileName.txt”中,从而将小写字母转换为大写字母。
chcase(一个 perl 脚本)可以在 chcase 主页上找到。
(格式化)一个简单的文本格式化工具。 使用 fmt 和 -u 选项输出具有“统一间距”的文本,其中单词 之间的空格减少为一个空格字符 ,句子 之间的空格减少为两个空格字符。
示例
fmt -u myessay.txt
将来自两个文件的行放在一起,可以是每个文件的行并排排列(通常用制表符 分隔 ,但您可以使用任何您喜欢的符号...),也可以是来自每个文件的单词(第一个文件,然后是第二个文件)并排排列。
要获得并排 的行列表,第一个文件的第一行在左侧,用制表符 分隔 ,然后是第二个文件的第一行。 您将输入
paste file1.txt file2.txt
要以串行方式显示列表 ,第一个文件的第一行,[制表符],第一个文件的第二行,然后是第三行和第四行,直到第一个文件类型结束
paste --serial file1.txt file2.txt
如果您自己创建一个示例,这个命令就非常容易理解:如果您为自己创建一个示例,它会更容易。 只需几行代码,我使用了“第一个文件的第一行”和“第二个文件的第一行”等等来快速示例。
将制表符转换为空格 并输出它。 使用选项 -t num 指定 “制表位”的大小 ,即每个制表符 之间的字符数 。
命令语法
expand file_name.txt
命令语法
unexpand file_name.txt
uniq 选项
例如
uniq -cd phone_list.txt
(转换)。 一个过滤器, 用于替换文本文件中字符 的所有实例 ,或“挤压” 空格 。
示例
cat some_file | tr '3' '5' > new_file
这将在某个文件上运行 cat 程序 ,此命令的输出将发送到 tr 命令,tr 将替换所有 3 的实例 为 5,就像搜索 和替换一样。 您还可以执行其他操作,例如
cat some_file | tr '[A-Z]' '[a-z]' > new_file
这将在 some_file 上运行 cat,并将任何大写 字母转换为小写字母(您也可以使用它来更改文件名的大小写...)。
替代方案:您还可以使用单行 Perl 命令执行搜索和替换,请阅读本节末尾的相关内容。
行号 工具,它的默认 操作是将它的输入(作为参数给出的文件名 或标准 输入)写入标准输出。
此命令可以采用更多 高级 编号 选项,只需阅读有关它的信息 页面 。
这些高级 选项主要与编号的自定义 有关,包括 节/页/页脚等的不同 分隔形式 。
也可以尝试 cat -n(给所有行编号)或 cat -b(给所有非空白行 编号)。 有关 cat 的更多信息 ,请查看本节: 名为文本查看工具的章节
有两种方法可以使用 nl
nl some_text_file.txt
上述命令将为 some_text_file 的每一行添加 编号。 您可以使用 nl 对某些内容的输出进行编号,如下面的示例 所示;
grep some_string some_file | nl
要在文件中搜索和替换文本,请使用以下单行 Perl 命令[1]
$ perl -pi -e "s/oldstring/newstring/g;" filespec [RET]
在此示例中,“oldstring” 是要搜索的字符串 ,“newstring” 是要替换它的字符串,而“filespec” 是要处理的文件或文件的名称。 您可以将其用于多个文件。
示例:要在当前 目录 中的所有文件中将字符串“helpless”替换为字符串“helpful”,请键入
$ perl -pi -e "s/helpless/helpful/g;" * [RET]
如果这些工具太原始:如果这些文本工具对于您的目的来说太简单,那么您可能需要进行一些编程或脚本编写。
如果您想了解有关 bash 脚本的更多信息,请参阅 Mendel Cooper 撰写的 高级 bash 脚本指南。
sed 和 awk 是传统的 UNIX 系统文本处理工具,本指南不提供对它们的解释。 sed 逐行工作以执行替换,而 awk 可以执行类似的任务,或者通过处理文件并打印出某些信息来提供帮助(它是一种编程语言)。
您通常会在您的 GNU/Linux 系统上找到它们,并且会在互联网上找到许多教程,如果您需要对文本文件执行许多类似的操作,请随时查找它们。
[1] | 此信息摘自 Linux Cookbook(未经编辑)。 有关更多信息,请参阅 参考书目 中的 [3]。 |