玩转Linux命令之三剑客


1 grep命令

功能说明
grep(Global Regular Expression Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。其格式如下
grep[选项]pattern file

grep命令的选项及其说明如下

选项 说明
-v 过滤指定字符串内容的行
-i 不区分大小写
-E 过滤多个字符串
-o 输出多个精确匹配的字符,而不是整行

使用案例

[root@tony data]# vim teach.txt #创建测试数据(编辑测试数据内容)
Program language
Java
C
C++
PHP
Python
Ruby

OS
Windows
windows
Linux
Mac
Unix
Android
IOS

过滤掉指定的字符串(“windows”)匹配的行并忽略大小写后将结果输出

[root@tony data]# grep -vi 'windows' teach.txt #忽略大小写并过滤包含Windows字符串的行

Program language
Java
C
C++
PHP
Python
Ruby

OS
Linux
Mac
Unix
Android
IOS

过滤掉多个匹配字符串内容(‘Android|IOS’)的行并将结果输出

[root@tony data]# grep -vE 'Android|IOS' teach.txt  #过滤Android和IOS字符串对应的行

Program language
Java
C
C++
PHP
Python
Ruby

OS
Windows
windows
Linux
Mac
Unix

查找指定的进程

[guanglei@tony data]$ ps -ef|grep ssh #查找SSH远程加密连接的进程
root       1403      1  0 09:54 ?        00:00:00 /usr/sbin/sshd
root       1509   1403  0 10:00 ?        00:00:00 sshd: guanglei [priv]
guanglei   1511   1509  0 10:00 ?        00:00:00 sshd: guanglei@pts/1
guanglei   1654   1512  0 10:21 pts/1    00:00:00 grep ssh

2 sed命令

功能说明
sed主要用来编辑文件,简化对文件的反复操作,编写转换程序等,擅长取行。其格式如下
sed [选项] [n1,[n2]][function],n1,n2表示选择行数的区间

选项 说明
-n 取消默认输出
-i 改变文件内容

fuction:
d:删除
i:插入
p:打印
s:替换

使用案例

查找匹配字符串内容的行

[root@tony data]# sed -n '/J/p' teach.txt  #匹配指定字符串的行   
Java

删除匹配字符串内容的行

[root@tony data]# sed -i '/Python/d' teach.txt        
[root@tony data]# cat teach.txt 

Program language
Java
C
C++
PHP
Ruby

OS
Windows
windows
Linux
Mac
Unix
Android
IOS
[root@tony data]# 

实现文件内容的替换

[root@tony data]# sed -i 's#Android#android6.0#g' teach.txt  #将Android替换成Android6.0
[root@tony data]# cat teach.txt 

Program language
Java
C
C++
PHP
Ruby

OS
Windows
windows
Linux
Mac
Unix
android6.0
IOS

实现指定文件内容的查找并替换

[root@tony data]# mkdir -p  grandparent/parent/son #创建三级目录
[root@tony data]# tree #查看目录树结构
.
├── grandparent
│   ├── parent
│   │   ├── son
│   │   │   └── test.txt
│   │   └── test.txt
│   └── test.txt
└── teach.txt
[root@tony data]# echo "This is Linux Operator System" >grandparent/test.txt #创建测试数据
[root@tony data]#  echo "This is Linux Operator System" >grandparent/parent/test.txt
[root@tony data]#  echo "This is Linux Operator System" >grandparent/parent/son/test.txt

[root@tony data]# find ./ -type f -name "test.txt"|xargs sed -i 's#Linux#Unix#g' #将匹配的文件内容字符串转换为Unix

[root@tony data]# cat grandparent/test.txt #查看修改结果
This is Unix Operator System

获取指定区间行数的内容

[root@tony data]# sed -n '2,5p' teach.txt 
Program language
Java
C
C++

3 awk命令

awk是一种程序设计语言,允许创建简短的程序,这些程序读取输入文件,为数据排序,处理数据,对输入执行计算以及生成报表。其格式如下

awk ‘{pattern +action}’ {fileNames}

选项 说明
-F 指定分割的内容

内置变量
NR: 表示行号

使用案例

使用awk实现获取指定区间的内容

[root@tony data]# awk '{if(NR<5&&NR>=2)printf $1 "\n"}' teach.txt  
Program
Java
C

相关内容