awk和sed命令

在学习awk和sed首先了解一下linux一些常见命令grep "string" /....就是在某个文件或者目录下搜索某个字符串关键字,如果加上-n的话则会显示对应的行数。
例如要获取/etc/passwd中的有root的一行。

1
grep -n "root" /etc/passwd

如果我要在某个目录中以及子目录中寻找某个关键字,那么可以用

1
grep -nR "string" *

cut命令:

1
2
3
4
cut  -d "分割字符"  -f  字段
参数:
-d 指定我们的分割字符
-f 指定我们显示的区域

获得root用户在 /etc/passwd中以”:”分割的1,3,4列的信息:
grep -n “root” /etc/passwd | cut -d “:” -f 1,3,4


sed:在sed处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。
特点:
每次仅读取一行内容;
根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
将执行结果输出。
演示sed的工作模式
格式:

1
sed [options] '{command}[flags]' [filename]

options选项:
-e 脚本命令 该选项会将其后面的脚本命令添加到已有的命令中。
-f 脚本文件 该选项会将其文件中的脚本命令添加到已有的命令中。
-n 只显示匹配的行
-i 直接对原文件进行操作,会修改原文件内容。sed命令默认不修改文件

sed内部常见命令:
i :insert,在指定匹配到的行前面添加新行内容为 string
a :append,在指定或匹配到的行后面追加新行,内容为 string
d :delete,删除符合地址定界条件的的行
p :print,默认 sed 对模式空间内的处理完毕后,将输出的结果输出在标准输出,
添加 p 命令,相当于输出了原文,又一次输出了模式匹配处理后的内容
s : 查找并替换,默认只替换每行中第一次被模式匹配到的字符串 ,如果修饰符为 g,
则为全部替换。

flags:

n : 1~512之间的数字 表示指定要替换的字符串出现第几次时才进行替换。
例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
g : 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。
例如,一行数据中有 3 个 A,则只会替换第一个 A;
p : 会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。

这些内容都不是用来死记硬背的,用到哪里不会的话就来查查。


显示 /etc/passwd第三行的信息:
sed -n “3p” /etc/passwd
在/etc/passwd中第一行前添加一行内容为”Good Good Study”:
sed “1iGood good study” /etc/passwd
把/etc/passwd中所有名字为root的字符串改为class
格式:

sed “s/root/class/g” /etc/passwd
以上这些对passwd的操作并没有修改源文件内容,如果要修改源文件内容就用-i。


awk:awk更倾向于把一行分为多个”字段”然后进行处理。
语法格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
awk [options] 'pattern {action}' filename  

options : 可选参数
-F : 指明输入时用到的字段分隔符,默认分隔符为空格或tab键
-v (var=VALUE) : 自定义变量

pattern :匹配规则
action :某些计算操作/格式化数据/流控制语句
filename:文件名

示例:
awk -F ":" '{print $1}' /etc/passwd

Contents
  1. 1.