grep
grep
: Globally search a Regular Expression and Print
即全局搜索正则表达式并输出显示.
grep的操作对象为加载在内存中的文件,所以不会修改文件本身.
默认情况下grep
命令使用的是标准正则,也可以通过参数使用扩展正则表达式.
grep ##默认为标准正则表达式
grep -E = egrep ##使用扩展正则表达式
##常用参数
-i ##忽略大小写
-E ##使用扩展正则表达式
-n ##显示匹配的行的同时显示行号
-5 ##显示过滤行及其上下5行的内容
-B5 ##显示过滤行及其上方5行的内容 Before
-A5 ##显示过滤行及其下方5行的内容 After
-v ##反向过滤
默认的正则匹配为贪婪模式,也就是只要字符串中出现了要检索的部分就判断为符合要求.
如system
包含sys
,如果检索sys
则system
字段也会被检索出来.
当然,也可以让检索更严格.
##指令基本格式
grep 匹配条件 处理文件
##参数示例
grep root passwd ##过滤显示passwd文件中含有root的行
grep ^root passwd ##过滤显示root开头的行
grep root$ passwd ##过滤显示root结尾的行
grep -i root passwd ##过滤显示passwd文件中包含root的行,root不局限于大小写
grep -e '\<root' passwd ##root字符之前不能有字符
grep -e 'root\>' passwd ##root字符之后不能有字符
grep -5 ##显示过滤行及其上下5行的内容
grep -n ##显示过滤结果时同时显示行号
grep -v ##反向过滤输出
sed
##命令格式
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
sed
默认输出模式空间内的内容,其如果附加参数会同时输出模式空间内的内容和命令处理后的内容,造成内容冗余.
-n ##不输出模式空间内的内容
对字符的处理
p ##显示
sed -n 5p passwd ##显示passwd文件的第5行内容
sed -n 3,5p passwd ##显示passwd文件的第3-5行内容
sed -ne '3p;5p' passwd ##显示passwd文件的第3行和第5行内容
sed -ne '5,$p' passwd ##显示passwd文件的第五行以后的内容
sed -n '/^s/p' passwd ##显示passwd文件中以s开头的行
d ##删除
##删除操作本身就是对模式空间中的内容进行操作
##如果-n就没有输出了,因此不需要添加-n参数
sed 5d passwd ##删除passwd文件第5行
sed '/^s/d' passwd ##删除passwd文件中以s开头的行
sed '/^s/!d' passwd ##删除passwd文件中除了s开头的行以外的所有行
sed -e '5,$d' paaswd ##删除passwd文件第5行以后的所有内容
a ##添加
sed -e '$a hello world' passwd ##在passwd文件的结尾添加'hello world'
sed -e '$a hello\n world' passwd ##在passwd文件的结尾添加'hello(换行)world'
sed -e '/^s/a hello world' passwd ##在passwd文件的s开头的行的行尾添加'hello world'
c ##整行替换
sed -e '/^s/c hello world' passwd ##将passwd文件的s开头的行替换为hello world
sed '5chelloworld' passwd ##将passwd文件的第5行替换为hello world
w ##将符合的行写入到指定文件中
sed '/^sys/w TestFile' passwd ##将passwd文件中sys开头的行筛选出来写入到TestFile文件
i ##插入
sed '5ihello world' passwd ##在passwd文件的第5行开头插入hello world
r ##整合
sed '1r TestFile' passwd ##读取passwd,追加写入到TestFile的第一行后,之后跟TestFile的其他内容,两文件融合显示
sed 字符替换
sed 's/:/###/g' passwd ##将文件中所有的:替换为###
sed 's/:/###' passwd ##没有g,意思为将文件中每一行的第一个:替换为###
sed '1,5s/:/###/g' passwd ##将第1-5行的:替换为###
sed '1s/:/###/g' passwd ##将第1行的:替换为###
sed '1s/:/###/g;5s/:/###/g' passwd ##两条命令并列执行,将第1行和第5行的:替换为###
sed '/lp/,/halt/s/:/###/g' passwd ##将从lp所在行到halt所在行中所有的:替换为###
sed 's/\//####/g' passwd ##将文件中所有的/替换为####
##因为/在sed命令中本身有分割作用
##因此使用\对其进行转义,写作'\/'
sed 's@/@####@g' passwd ##sed命令中的/也可以用@代替
##因此这一条的作用与上条相同
上述操作对是对模式空间中的内容进行操作,并不会对文件产生影响.
如果需要将操作/改动保存到文件,需要额外添加-i
参数.
将操作结果保存到文件
sed 's/:/####/g' -i TestFile ##将TestFile中的所有:替换为####后保存到文件
AWK
AWK是一种处理文本文件的语言,是一个强大的文本分析工具,也可以叫做报告生成器
.
awk -F 分割符 *BEGIN{} {} END{}
BEGIN{}
表示开始时执行的命令
{}
表示需要执行生成的命令
END{}
表示结束前执行的命令
NR ##行数
NF ##列数
FILENAME ##文件名称本身
Test ##Test变量的值
"Test" ##Test字符串
条件判断的相关内容
/bash$/ ##条件,bash结尾的行
/bash$|root/ ##以bash结尾的行 或 包含root的行,或逻辑
/bash$/||/root/ ##与上一行表意相同
/bash$/&&/root/ ##包含root 且 以bash结尾的行,与逻辑
$0 ##所有的列
$1 ##第1列
$2 ##第2列
~ ##是
!~ ##不是
##由此可以举例
$9~ ##第9列是
$7~! ##第7列不是
awk -F : '{print $1}' passwd
显示输出`passwd`文件中的第1列内容
awk -F : '$7!~/\bin/bash/{print $0}' /etc/passwd
显示输出`etc/passwd`文件中第7列不是`/bin/bash`的整行内容
示例
[root@Node1 Desktop]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
gnome-initial-setup:x:977:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
rngd:x:976:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
westos:x:1000:1000:westos:/home/westos:/bin/bash
[root@Node1 Desktop]# awk -F : '$7~/\/bin\/bash$/{print $0}' passwd
root:x:0:0:root:/root:/bin/bash
westos:x:1000:1000:westos:/home/westos:/bin/bash