文本处理三剑客{
1.内容过滤器 => grep
2.文本分析器 => awk
3.行文本处理器 => sed
}
grep内容过滤器
grep命令是Linux系统中一个非常强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep命令的基本语法如下:
grep [选项] PATTERN [文件名]
其中,PATTERN表示要搜索的模式,可以是字符串、正则表达式或者单个字符;文件名是要搜索的文件,如果不指定文件名,则从标准输入读取数据。
grep命令的主要选项有:
- -i:忽略大小写
- -v:显示不包含匹配文本的所有行(反向匹配)
- -n:显示匹配行的行号
- -c:显示匹配行的数量
- -l:显示包含匹配行的文件名
- -r:递归搜索子目录中的文件
- -E:将模式视为扩展正则表达式
- -F:将模式视为固定字符串,而非正则表达式
- -w:匹配整个单词,而非字符串的一部分
- -A num:显示匹配行及其后num行
- -B num:显示匹配行及其前num行
- -C num:显示匹配行及其前后各num行
例子1:在文件file.txt中查找包含"hello"的行
grep "hello" file.txt
例子2:在文件file.txt中查找包含"hello"或"world"的行,忽略大小写
grep -i "hello\|world" file.txt
awk文本分析器
awk是一种在Linux系统中处理文本文件的语言,被誉为文本分析工具中的“三剑客之首”,其它两把剑分别是grep和sed。它逐行读取文本,并以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并根据模式或者条件执行编辑命令。
awk的基本语法格式是 awk 'pattern {action}' filename,其中pattern表示AWK在数据中查找的内容,而action是找到匹配内容时所要执行的一系列命令。
例如,我们有一个名为students.txt的文件,内容如下:
Tom 85 90 92 Jerry 88 92 96 Alice 78 80 85
如果我们想要计算每个学生的平均分,可以使用以下命令:
awk '{sum=($1+$2+$3)/3; print $0, sum}' students.txt
这条命令首先通过{sum=($1+$2+$3)/3;}计算每个学生的总分数,然后通过print $0, sum打印每行和总分。
另一个例子,如果我们想要查看一个文件的行数,可以使用以下命令:
awk 'END { print NR }' example.txt
这个命令通过内置变量NR(记录数)来调用相关信息,打印出文件的行数。
这条Linux命令使用了两个常用的文本处理工具:cat 和 awk。下面是命令的详细解释:
- cat test.txt
:cat 是 "concatenate" 的缩写,通常用于显示文件内容。这里它将 test.txt 文件的内容输出到标准输出(通常是你的终端屏幕)。
- |
:这个符号是管道操作符,它允许你将前一个命令的输出作为下一个命令的输入。
- awk '/^name/{name=$0; next;}{print name "-" $0}'
:awk 是一个强大的文本处理工具,能够执行复杂的文本操作。这个 awk 命令做了以下几件事:
综上所述,这条命令的作用是:从 test.txt 文件中找到以 "name" 开头的行,将其内容存储在一个变量中,并为该文件中的每一行打印出这个变量的内容,后面跟着一个短横线和当前行的内容。如果文件中有多个以 "name" 开头的行,只有第一次出现的 "name" 行的内容会被使用。
例如,如果 test.txt 文件的内容是:
name John Doe age 30 location New York
运行这条命令后,输出将是:
name John Doe - age 30 name John Doe - location New York
这样,无论文件中有多少行,以 "name" 开头的那一行的内容都会被重复打印,直到遇到文件的末尾。
sed行文本处理器
sed 是一个流编辑器,用于对文本数据进行处理。它一次读取一行输入,然后根据指定的指令对这行数据进行处理,并将结果输出。sed 命令非常适合用于自动化文本处理任务,如查找、替换、删除文本行等。
基本语法:
sed [选项]... [指令]...
主要参数:
- -n 或 --quiet 或 --silent:仅打印 sed 指令处理后的行,不打印模式空间的内容。
- -e:添加一个指令到命令的列表中。
- -f:从文件中读取 sed 指令。
- -i:直接修改文件,而不是输出到标准输出。
常用指令:
- s:替换指令,格式为 s/regexp/replacement/flags。
- regexp:正则表达式,用于匹配要替换的文本。
- replacement:用于替换匹配到的文本的字符串。
- flags:可选标志,如 g 表示全局替换。
示例:
- 替换文本中的字符串
:
假设我们有一个文本文件 example.txt,内容如下:
hello world hello universe hello galaxy
使用 sed 将所有的 "hello" 替换为 "hi":
sed 's/hello/hi/' example.txt
输出:
hi world hi universe hi galaxy
如果要直接修改文件,可以使用 -i 选项:
sed -i 's/hello/hi/' example.txt
- 删除匹配的行:
继续以 example.txt 为例,如果要删除所有包含 "universe" 的行:
sed '/universe/d' example.txt
输出:
hi world hi galaxy
同样,使用 -i 选项可以直接修改文件:
sed -i '/universe/d' example.txt
请注意,sed 的功能非常强大,这里只是介绍了一些基本的用法。根据具体的需求,sed 可以执行更复杂的文本处理任务。
g代表将所有的warning替换为Warning,如果不加g的话就是将每一行的第一个warning替换为Warning
如果不加 -i 参数 就不会对源文件进行修改文本只是进行终端的输出