Linux三剑客:grep, awk, sed。
Linux命令搜索及查看-> 点击这里。
-
grep 命令 :强大的文本’搜索’工具
- grep -n 'word' file_name 在file_name文件中找到word所在的所有行并显示。-n 为显示行号
- grep 'w[ea]ll' file_name 在file_name文件中找到wall 或者是well 所在的所有行并显示
- grep 'w[^e]ll' file_name 在file_name文件中找到”非well” 所在的所有行并显示
- grep '^The' file_name 在file_name文件中找到以The开头的所有行并显示
- grep 'g..le' file_name 在file_name文件中找到如goole/gkkle..的所有行并显示
- grep 'g*g' file_name 在file_name文件中找到g/gg/ggg等的所有行并显示(*代表重复前一个字符无穷次)
-
sed :实现数据的增加,删除,替换,选取等(按顺序逐行读取文件,不会影响源文件)
-
格式:sed [option] [command] [file]
常用命令:
a ∶新增
c ∶取代
d ∶删除
i ∶插入
p ∶打印
s ∶取代 - sed ’1d' ghostwu.com d代表删除 d前面的数字代表删除第一行,该命令不会修改文件本身
- sed '$d' ghostwu.txt 删除最后一行,$代表最后一行
- sed '1,2d' ghostwu.txt 删除第一行到第二行
- sed '2,$d' ghostwu.txt 删除第二行到最后一行
- sed -n '/you/p' ghostwu.txt 查找包含'you'的行,/you/ 这是正则表达式, p是打印,要跟n结合起来用
- sed '1,2a 你好啊' ghostwu.txt 在第一行和第二行的后面,增加一行“你好啊"
- sed '1a 你好啊 很高兴认识你' ghostwu.txt 在第一行的后面,增加2行数据, 换行
- sed '1c 你好啊' ghostwu.txt 将第一行数据替换为“你好啊"
- sed -i '$a 你好啊' ghostwu.txt 在最后一行新增“你好啊",该命令会修改文件本身
-
-
awk : 以字段为单位进行处理(其实就是把一行的数据分割,然后进行处理)
- 格式:awk [options] '{pattern + action}' {filenames}
- pattern:模式,即条件,可理解为'找谁'
- action:动作,可理解为'干啥'
- awk -F ":" 'NR>=2 && NR<=6{print NR,$1}' /etc/passwd2
-F 指定分隔符为冒号,相当于以“:”为菜刀,进行字段的切割。
NR>=2 && NR<=6:这部分表示模式,是一个条件,表示取第2行到第6行。
{print NR,$1}:这部分表示动作,表示要输出NR行号和$1第一列。 - awk 'BEGIN {count=0;print "[start] user count is ",count} {count=count+1;print $0} END{print "[end] user count is ",count}' passwd
BEGIN 指定了处理文本之前需要执行的操作
END 指定了处理所有行之后需要执行的操作 - awk 'NR>22 && NR<31' /etc/services 取出文件/etc/services的23~30行
- awk -F "[ /]+" '$1~/^(ssh)$|^(http)$|^(https)$|^(mysql)$|^(ftp)$/{print $1,$2}' /etc/services |sort|uniq 取出常用服务端口号
- 内置变量
$0 当前行整行
$1 当前行被分割符划分成N段,$1表示第一个字段,$2标识第二个字段,$NF当前行被分割后的最后一列(字段)
NF 当前行被分割符划分成8段 NF=8