Linux 7.6
第十一章:Linux中的三剑客
Linux中的三剑客就是Linux中的三个重要的命令,主要是对文本进行操作处理。
一.普通剑客
- cut
- 用指定的规则来切分文本
cut -d ':' -f1,2,3 文件名
//单引号里面是切分的标准,这里以:来切分
//-f1,2,3是只切分显示前三列
- sort
- 对文本中的行进行排序
sort 文件名//默认为按照首字母的字符排序,若首字母相同则从第二个字符开始,以此类推。
sort -t ':' -kN 文件名//对每一行的数据以单引号中的:进行切分,按照第N列进行排序
//这里的排序是按照字符来排序而非数字大小,就譬如说11的第二位字符1比1000的第二位字符0大,所以11应该排在排在1000后面
sort -t ': '-kN -r(reverse) 文件名//逆序
sort -t' '-k2 -n(number) 文件名//按照数值大小进行排序,如果有字母,字母在前
- wc(word count)
- 统计单词的数量
wc 参数 文件名
//结果显示的分别为-l(line)行数,-w(word)单词数,-c(char)字符数,文件名
//可以加入参数选项,单独查询三项数值中的某一项
- 参数
- -l line
- -w word(以空格来区分单词)
- -c char
二.一号剑客:grep
- 对文本内容进行搜索
- 可以同时搜索多个文件,如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行
- 语法
grep [选项] 模式 文件名 //模式:字符(串)or正则表达式
- 参数
- -c :仅列出文件中包含模式的行数。
- -i :忽略模式中的字母大小写。
- -l :列出带有匹配行的文件名。
- -n :在每一行的最前面列出行号。
- -v :列出没有匹配模式的行。
- -w :把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。
- 例:
grep 查询内容 文件1 文件2 文件N
//和whereis和find相比,这个grep查询的是文件里面的文本内容,前两者查找的是文件名
grep -n 查询内容 文件N//显示匹配的行号
grep -nvi school passwd --color=auto//显示不匹配的忽略大小写,颜色可以修改
grep -E "[1-9]+" passwd --color=auto//使用正则表达式匹配
//正则表达式是描述一组字符串的一个模式
//正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式
三.二号剑客:sed
3.1 简介
- sed(Stream Editor,字符流编辑器)简称流编辑器
- sed 命令是利用脚本来处理文本文件,其主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
3.2 运行方式
- 当处理数据时,sed软件从文件或管道中读取一行,处理一行,输出一行,重复这个过程,直到将文件中所有数据处理完毕。
- 一次一行的设计使得sed软件性能很高
- 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
3.3 语法
- sed 命令的基本格式如下:
sed [参数] '脚本命令' 文件名
- 参数
- -n :默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽文本内容,需使用 print 命令来完成输出。
- -i :此选项会直接修改源文件,不输出。
- 脚本命令
- -e :该选项会将其后跟的脚本命令添加到已有的命令中。
- -f :该选项会将其后文件中的脚本命令添加到已有的命令中。
- 行—选择模式(脚本命令处输入)
- N :第十行
- m,n :第m行到第n行[m,n]
- m,+n :第m行到第m+n行[m,m+n]
- m~n :从m行开始,接下来每次间隔n行重复
- m,$ :从m开始到最后一行
- /a/ :匹配到a的行
- /u1/,/u4/ :从匹配u1的行到匹配u4的行之间的每一行
- 增加内容(a.append,i,insert)
sed ’行—选择模式a 增加内容' 文件名//在选择的行下面另起一行增加内容
sed ‘行—选择模式i 增加内容' 文件名//在选择的行上面另起一行增加内容
//例
sed '2a ===' passwd//在passwd第2行后面增加一行的内容为===
- 删除内容(d.delete)
sed ’行—选择模式d' 文件名/删除选择的行
//例
sed '3,10d' passwd//删除passwd中的3-10行
- 修改内容
整行替换
sed ’行—选择模式c 替换的内容' 文件名//替换选择的行
//例
sed '3,10c aaaaaa' passwd//将passwd文件中的第3-10行的内容删除后增加一行aaaaaa
字符替换
- 语法
sed [参数] ’行—选择模式s/替换的内容/新内容/flags‘ 文件名
flags 标记 | 功能 |
---|---|
N | 范围:1~512,表示指定要替换的字符串出现第几次时才进行替换 |
g | 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作 |
p | 会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用 |
w file | 将缓冲区中的内容写到指定的 file 文件中 |
& | 用正则表达式匹配的内容进行替换 |
\n | 匹配第 n 个子串,该子串之前在 pattern 中用 () 指定 |
\ | 转义(转义替换部分包含:&、\ 等) |
- 例
sed '2,5s/a/b/2' passwd
//将passwd文件中的第2-5行中每行的第二个a改为b
sed '2,5s/a/b/g' passwd
//将passwd文件中的第2-5行中所有的a改为b
sed -n '2,5s/a/b/p' passwd
//-n 参数会禁止 sed 输出,但 p 标记会输出修改过的行,将二者结合使用的效果就是只输出被替换命令修改过的行
//将passwd文件中的第2-5行中所有的a改为b,并且只显示出被修改后的行
sed '2,5s/a/b/w test.txt' passwd
//w 标记会将匹配后的结果保存到指定文件中,类似于将sed -n '2,5s/a/b/p' passwd的结果存储在另一个文件中
//将passwd文件中的第2-5行中所有的a改为b,并且只把被修改后的行存储在test.txt中
sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd
//在使用 s 脚本命令时,替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义,例如:
四.三号剑客:awk
- 这是一门很强大的语言,一般我们用这个去获取虚拟机IP地址。具体用到时候去查找具体的命令。
- awk 的强大之处在于脚本命令,它由 2 部分组成,分别为匹配规则和执行命令,和 sed 命令类似,awk 命令也是逐行扫描文件(从第 1 行到最后一行),寻找含有目标文本的行,如果匹配成功,则会在该行上执行用户想要的操作;反之,则不对行做任何处理。
- 语法
awk [参数] '脚本命令' 文件名
- 参数
参数 | 含义 |
---|---|
-F fs | 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符 |
-f file | 从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令 |
-v var=val | 执行处理过程之前,设置一个变量 var,并给其设备初始值为 val |
- 模式与动作
awk -F":"'NR>=2&&NR<=6'/etc/passwd
awk -F ":"'{print NR,$1 }' /etc/passwd
awk -F ":"'NR>=2&&NR<=6 {print NR,$1}' /etc/passwd
awk -F":"'NR==1{print NR,$1}NR==2{print NR,$NF}' /etc/passwd