Linux 开发人员遵循创建完成一项任务并且做得很好的小程序的理念。 以 Linux 文本处理工具为例,它们是轻量级的,具有模块化的功能。 尽管这些文本操作工具在复杂性和功能上有所不同,但它们在图形用户界面不可用的环境中会派上用场。
本文介绍了读取文件和使用正则表达式对选定文本执行操作的最佳 Linux 工具。 它还涵盖了它们最基本的功能和示例,以便更好地理解。
1. grep
grep 是一个 Linux 文本操作实用程序,它在文件或文本中搜索称为正则表达式的字符串或模式。 grep 工具属于包括 egrep、fgrep 和 grep 在内的实用工具系列,其中 fgrep 是最快的,而 grep 是最简单的。
使用 grep 的一般语法如下:
grep -options string filename
例如,要在 /etc/passwd 文件中搜索单词“root”:
grep root /etc/passwd
一些入门的标准命令行示例是:
选项 | 例子 | 描述 |
---|---|---|
-C | grep -c ./bashrc | 计算字符串存在的行数 |
-一世 | grep -i ./bashrc | 对指定字符串执行不区分大小写的搜索 |
-这 | grep -o 文件 | 仅打印匹配的字符串 |
-l | grep -l “密码” | 打印当前目录中与模式匹配的文件名 |
-n | grep -n 文件 | 沿包含指定字符串的行打印行号 |
字符串1|字符串2 | grep “string1|string2” 文件 | 从文件中查找并打印多个字符串 |
同样,您可以使用 ^ 使用 grep 命令显示以特定字符开头的所有匹配字符串的元字符。
例如,以下命令通过管道将 env 命令输出作为 grep 的输入,并显示以 ” 开头的变量何“:
env | grep ^HO
2.awk
awk 是一种功能强大的脚本语言和命令行文本操作工具,可以执行逐行扫描并将行与模式进行比较。 awk 命令的基本语法是在单引号和大括号之间定义的操作,后跟文件名。
awk '{action}' filename
awk '{pattern; action}' filename
该实用程序使用正则表达式搜索文件并执行 action 参数中定义的函数。 如果不设置模式,awk 会在每一行执行脚本,如下所示:
awk '{print $1}' awk_examples.txt
…在哪里 1美元 显示第一个字段 awk_examples.txt 文件。
以下命令通过替换第二个字段“在给定模式上执行打印功能”世界“ 和 ”爱丽丝, 并显示整行 ($0):
echo "Hello World" | awk '{$2="Alice"; print $0}'
输出:
Hello Alice
同样,您可以使用该功能 打印 $0 从上面的命令模拟 grep 功能。
awk '/john/{print $0}' /etc/passwd
john:x:1001:1001::/home/john:/bin/sh
3.排序
sort 是另一个 Linux 命令行实用程序,可帮助您以排序格式显示指定文本文件的内容。 例如,您可以通过管道将 awk 命令的输出作为 sort 实用程序的输入,如下所示:
awk '{print $1}' awk_examples.txt | sort > sort_text.txt
cat sort_text.txt
输出:
4.sed
sed 或流编辑器将输入作为字符流,并对指定的文本执行过滤和文本转换(删除、替换和替换)。
您可以在脚本中使用它并以非交互方式编辑文件。 因此,该实用程序的最基本目的是替换字符串/字符。 一般语法是:
sed 's/string/substitution/option' file
使用随机句子创建一个文件,以练习和理解该实用程序的工作原理。
让我们替换单词“二” 在文件的每一行上用 “2“ 使用 -G 全局替换标志,如下:
sed 's/two/2/g' sed_examples.txt > sed_examples2.txt
同样,使用 -d 标志从文件中删除特定行:
sed '2d' sed_examples.txt
您还可以通过指定行号 (4 秒/两个/2/p) 并且只打印替换的行,如下所示:
sed -n '4 s/two/2/p' sed_examples2.txt
这 -n 上面命令中的标志禁用输入流到输出的自动打印。 您可以使用此选项将 grep 实用程序功能替换为 sed。
例如,您可以通过仅包含正则表达式模式来修改上面的命令 /二/p 使得 -p flag 只会将行打印到标准输出流。
sed -n '/two/p' sed_examples2.txt
5.切
cut 是另一个命令行实用程序,可以从行或文件中剪切/提取部分文本。 它根据指定的字段、字符或字节位置剪切文本,并将结果通过管道传输到标准输出。
该实用程序采用以下语法:
cut <options> file
使用 -b 使用指定字节或字节范围剪切部分或内容的选项:
cut -b 1 cut_examples.txt
使用 -C 通过指定字符的位置来提取文本的标志:
cut -c 1,3,5 cut_examples.txt
最后,您还可以通过指定字段来提取文本 -F 选项和 -d 对于空格或字段分隔符:
cut -d " " -f 1 cut_examples.txt
这是范围列表,其中包含您可以与字符一起使用的示例和描述 -C 和字节 -b 选项:
范围 | 例子 | 描述 |
---|---|---|
n- | cut -c 7- 文件名 | 从第 n 个整数中提取字符直到行尾 |
纳米 | cut -b 7-15 文件名 | 从输入文件中每行的整数 nm 中提取 |
-m | 剪切 -c -7 文件名 | 提取从 m 开始到行尾的行 |
请注意,您不能使用字段定义文本提取的范围 -F 选项。
使用 Linux 命令处理文本
Linux 提供了许多用于处理和处理文件或文本的程序和工具。 可能不需要全部学习它们,因为一旦您掌握了一个,就可以轻松地用另一个来填补空白,例如使用 sed 作为 grep 或 awk 作为 grep,但这并非适用于每个工具。
此外,Linux 命令有一个陡峭的学习曲线,但是一旦你掌握了这项技能,它们就会被证明在任何 Linux 用户的生活中都非常有用和有效,尤其是系统管理员。