一、awk
awk
是一种用于文本处理的强大的命令行工具,它逐行扫描文件、以字段为单位分析数据、执行操作并输出结果。awk
可以根据指定的模式和动作来处理文本文件的内容,通常用于数据提取、格式化、转换和报告生成等任务。
基本语法:
awk 'pattern { action }' filename
pattern
是一个条件或模式,用于筛选数据行。action
是要对匹配模式的行执行的操作。
常见选项:
-F separator
: 指定字段分隔符。例如,-F','
表示使用逗号作为字段分隔符。
常见用法:
-
打印特定列:
awk '{print $2}' filename
这将打印文件中所有行的第二列内容。
-
条件筛选数据:
awk '$2 >= 80 {print $1 " " $2}' filename
这个命令使用逗号作为字段分隔符,然后根据第二列的数值条件,打印符合条件的学生姓名和成绩。
-
计算行数:
awk 'END {print NR}' filename
NR
是awk
的内置变量,表示已读取的行数。 -
自定义输出格式:
awk '{printf "Name: %-10s Age: %s\n", $1, $2}' filename
这个命令将按照自定义的格式打印每行的第一列和第二列内容。
-
使用条件进行操作:
awk '{ if ($3 > 50) print $1 " passed"; else print $1 " failed" }' filename
在这个例子中,如果第三列的值大于50,就输出"passed",否则输出"failed"。
-
使用函数:
awk '{ total += $2 } END {print "Average: " total/NR}' filename
这个例子计算第二列的平均值,并在文件结束时输出结果。
awk
还可以执行更复杂的操作,包括循环、条件语句和函数等,使其成为一个强大的文本处理工具。语法更复杂的 awk
命令可以通过在单引号内编写更多的 awk
脚本来实现。
二、sed
sed
(Stream Editor)是一个强大的文本处理工具,用于在Unix和Linux环境中进行文本处理和编辑。它允许用户执行文本转换操作,包括替换、删除、插入和编辑文本文件的内容。以下是 sed
命令的基本语法和一些常见用法:
基本语法:
sed [选项] '脚本' 文件
- 选项:是一些可选参数,用于控制 sed 命令的行为。
- '脚本':是包含 sed 命令的脚本,脚本可以包含一个或多个 sed 命令。
- 文件:是要处理的文本文件的名称。
常见选项:
- -i:直接在原文件上进行编辑,即原文件会被修改。
- -e:允许在命令行中指定多个 sed 命令。
- -n:禁止默认输出,只输出经过 sed 处理后的文本。
- -r:使用扩展正则表达式,可以使用更多的正则表达式元字符。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
常见用法:
-
替换文本:
sed 's/old_pattern/new_pattern/' filename
这将在文件中查找
old_pattern
并将其替换为new_pattern
。 -
删除行:
sed '/pattern/d' filename
这将删除包含
pattern
的行。 -
插入行:
sed '3i\inserted_line' filename
这将在第3行之前插入一行
inserted_line
。 -
替换指定行:
sed '2s/old_pattern/new_pattern/' filename
这将在第2行中查找
old_pattern
并将其替换为new_pattern
。 -
多个操作:
sed -e 's/old_pattern/new_pattern/' -e '3d' filename
这将依次执行两个操作:首先替换
old_pattern
为new_pattern
,然后删除第3行。 -
使用扩展正则表达式:
sed -r 's/regex_pattern/new_pattern/' filename
这使用扩展正则表达式进行替换。
-
将修改直接应用到文件:
sed -i 's/old_pattern/new_pattern/' filename
这将在原文件上进行编辑,替换操作将直接应用到文件中。
sed 是一个非常有用的文本处理工具,它可以在批量处理文本文件、日志文件、配置文件等方面发挥重要作用。记住在使用 -i 选项时要小心,因为它会直接修改文件内容。
三、grep
grep
是一个强大的用于在文本中搜索指定模式的命令行工具。它通常用于在文件中查找包含特定文本的行,或者在管道中过滤符合特定模式的输出。
基本用法:
grep [选项] 模式 文件
模式
:是你要搜索的文本模式,可以是一个单词、一段文字,也可以是一个正则表达式。文件
:是你要在其中搜索的文件名。
常用选项:
-i
:忽略大小写,即不区分大小写地搜索。-r
或--recursive
:递归搜索子目录。-n
:显示匹配行的行号。-v
:反转匹配,显示不匹配的行。-l
:只列出包含匹配项的文件名,而不显示匹配的具体行。-c
:只显示匹配的行数,而不显示具体的行内容。- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-w
:匹配整个单词,而不是部分匹配。-A
、-B
、-C
:显示匹配行的前后若干行,分别表示after、before、context。-E
或--extended-regexp
:使用扩展正则表达式(支持更多的正则表达式元字符)。-F
或--fixed-strings
:将模式视为固定字符串,而不是正则表达式。
示例:
-
在文件中搜索指定模式:
grep "pattern" filename
-
递归搜索子目录:
grep -r "pattern" directory
-
忽略大小写:
grep -i "pattern" filename
-
显示匹配行的行号:
grep -n "pattern" filename
-
反转匹配,显示不匹配的行:
grep -v "pattern" filename
-
只列出包含匹配项的文件名:
grep -l "pattern" filename
-
只显示匹配的行数:
grep -c "pattern" filename
-
匹配整个单词:
grep -w "word" filename
-
使用扩展正则表达式:
grep -E "pattern" filename
-
将模式视为固定字符串:
grep -E "pattern" filename
grep
是一个强大的文本搜索工具,它支持正则表达式和简单的字符串匹配,使其成为处理文本数据和日志文件等任务的重要工具。