Linux 四剑客介绍和案例

正则表达式

Linux中文本处理工具:
grep(只支持基础正则表达式)
egrep(支持扩展正则表达式)
sed (支持扩展正则表达式)
awk (支持基础正则表达式支持扩展正则表达式)

基础正则表达式元字符:

\ :转义字符,!,\n 等
^ :匹配字符串开始的位置 如:^a:以a开头的字符
$ :匹配字符串结束的位置 如:word$:以word结束的位置
. : 匹配/n之外的任意的一个字符 如:go.d:匹配good .代表任意字符可以是多个

  • :匹配前面子表达式 0此或者多次 如:good :匹配good星号前面的子表达式多个或0个 如 gooood gooooooood
    [list] : 匹配list列表中的一个字符 如 go[old]d:匹配good或gold或 godd
    [^list]: 匹配任意不在list列表中的一个子符 如[^list] :匹配不含有list的字符
    {n,m}:匹配前面的子表达式n到m次,有{n},{n,},{n,m}三种格式 如:go{2}d:匹配o两次 ,go{2,3}d :匹配o 2到3次 ,go{2,}d:匹配2次以上

扩展正则表达式元字符

  • :匹配前面子表达式1次以上 如:go+d 将匹配至少一个o
    ?:匹配前面子表达式0次或者1次 如:go?d 将匹配gd或god
    () :将括号中的字符串作为一个整体 如:(xyz)+ 将匹配xyz整体1次以上结果xyzxyz
    | :以或的方式匹配字条 如 :good|food 将匹配good或者food g(oo|la)d 将匹配good或者glad

grep工具

-i :忽略大小写
-v :取反 分为:过滤出,过滤掉
例如:
grep ‘root’ /etc/passwd //筛选文件中包含root的行
grep -v ‘ root’ /etc/passwd //筛选文件中不包含root的行
grep ‘r..d’ /etc/passwd //筛选r和d之间两个任意字符的行
grep ‘[^s]bin’ /etc/passwd //筛选bin前面不是以s开头行
grep ‘^$’ /etc/passwd //筛选出空格白行
grep ‘t[es]’ /etc/passswd //筛选包含te或者ts的行
grep ‘0{1,}’ /etc/passwd //筛选查找数字0出现的次数1次或1次以上
grep -e ‘root’ -e ’sshd’ /etc/passwd //查找root和sshd的行 注:-e参数查找多个模式
grep ‘[^a-z]ae’ /etc/passwd //筛选ae前面不是以小写字母的行
grep ‘^[a-z]ae’ /etc/passwd //筛选ae前面以小写字母开头的行
注:当使用连续的字符时,小写字母[a-z],大写字母[A-Z],数字[0-9]
grep ‘0’ /etc/passwd //匹配所有的内容(包括空白行)
注:00
匹配至少包含一个0的行(第一个0必须出现,第二个0可出现0次或多次)

egrep工具

egrep 0+ /etc/passwd //匹配至少包含一个0的行
egrep ‘(root|ntp)’ /etc/passwd //匹配包含root 或者ntp的行
egrep ‘ro?t’ /etc/passwd //匹配rt或者rot的行
egrep -v ‘^$|^#’ /etc/passwd //过滤文件中空白行与#开头的行。没有空白行与#号开头的行,所以没有如何输出

sed工具

概述:
sed是文本处理工具,读取文本内容,根据指定的条件进行处理,如删除,替换,添加等
可在无交互的情况下实现相当复杂的文本处理操作被广泛应用于shell脚本,已完成自动化处理任务,sed依赖于正则表达式
命令语法
sed -e ‘编辑指令’ 文件1 文件2 文件 3....... 注:-e ,在’编辑命令’中可有’;’来分割执行命令
sed -n -e ‘编辑命令’ 文件1 文件2... -n 只显示过滤出内容
sed -i -e ‘编辑命令’ 文件1 文件2.... -i:流编辑器。读一行处理一行
sed命令格式:
编辑命令格式:[地址1],[地址2]操作[参数]
“地址”,可数字,正则表达式,$ 如果没有地址代表时所有行
“操作” 可以是 p,d,s,r,w,i等...
“参数” 一般有g ,代表只要符合i傲剑全部进行处理(g全部)
常用操作:
p :输出指定的行
d :删除指定的行
s/c :子串替换,格式 :”行范围 s/旧字符串/新字符串/g”
r :读取指定条件
w:保存为文件
i :插入,在当前行前面插入一行或多行
输出指定的行:
sed -n ‘p’ /etc/passwd //将所有内容输出
sed -n ‘7p’ /etc/passwd //将第7行内容输出
sed -n ‘$p’ /etc/passwd //将最后一行输出
sed -n ‘1,7{n;p}’ /etc/passwd //将1~7行的奇数输出
sed -n ‘1,7{p;n}’ /etc/passwd //将1~7行的偶数输出
sed -n ‘1,+4p’ /etc/passwd //从第1行,连续4行进行输出
sed -n ‘/root/p’ /etc/passwd //将匹配包含root的进行输出
sed -n ‘10,/nom/p’ /etc/passwd //将从第10行至第一个包含nom的行进行输出
sed -nr ‘/ro{1,}t/p’ /etc/passwd //匹配不少一次前导字符0 ,-r参数支持扩展正则表达式 rot root
sed -n ‘/root|ntp/p’ /etc/passwd //输出包含root或者ntp的行 注:如果遇到特殊符号,扩展正则需要转义符 “\”
sed -n ‘/root/=’ /etc/passwd //将包含root所在的行行号输出, ‘=’用来输出行号
sed -e ‘5q’ /etc/passwd //输出前5行信息后退出 ,q 退出
sed -e ‘5p;7p;qp’ /etc/passwd //输出5行,7行, 9行信息插入符合条件的行
sed ‘/root/i admin:x:490:490::/:/sbin/nologin ’ /etc/passwd //在包含root行的前面一行插入admin:x:490:490::/:/sbin/nologin ’
sed ‘root/a admin:x:490:490::/:/sbin/nologin ’ /etc/passwd //在包含root行的下一行插入admin:x:490:490::/:/sbin/nologin ’
注:sed ‘/root/i’ 前面一行插入 sed ‘/root/a’ 后面一行插入
sed ‘saADMIN’ /etc/passwd //在第3行之后插入ADMIN
删除符合要求的行:
sed ‘1d’ /etc/passwd //删除第一行
sed ‘$d’ /etc/passwd //删除最后一行
sed ‘/^$/d’ /etc/passwd //删除所有空行
sed ‘2,4d’ /etc/passwd //删除第2到4行
sed ‘/root/d’ /etc/passwd //删除包含root的行
sed ‘/root/!d’ /etc/passwd //删除不包含root的行,这里的”!”表示取反操作
sed ‘/^root/d’ /etc/passwd //删除以root开头的行
sed ‘/nologin$/d’ /etc/passwd //删除以nologin结尾的行替换符合条件的文本
sed ‘s/root//g’ /etc/passwd //将文件中所有的root都替换成空 g替换全部 s:全部内容
sed -n ‘s/root/admin/2p’ /etc/passwd //把每行的第2个root替换成admin
sed ‘/root/s/root/ROOT/g ’ /etc/passwd //将第1~3行中的所有root都替换为ROOT
sed ‘1,3s/bin/BIN/g’ /etc/passwd //将第1~3行中的所有bin都替换为BIN
sed ‘s/$/ABC/’ /etc/passwd //在每行行尾插入字符串ABC
sed ‘s/^/#/’ /etc/passwd //在每行行首插入#号
sed ‘/root/s /^/#/’ /etc/passwd //将包含root的行的行首插入#号
sed ‘1c ABC ’ /etc/passwd //将第一行替换为ABC
sed ‘y/root/ROOT/’ /etc/passwd //将root对应替换为ROOT y:对应替换
sed ‘/1,10y/root/ROOT’ /etc/passwd //将第1~10行中的root 对应ROOT
迁移符合条件的文本:
sed ‘15,16 w out.txt’ test,txt //另存为
sed ‘5r /etc/reslov.conf ’ test.txt //将/etc/relov.conf 内容读取到当前文件第5行后面
sed ‘1,5(H:d);$G’ test.txt //将第1~5行内容迁移至末尾 注:H 复制到缓冲区 G 追加到指定行后
sed ‘/^IP/ s/^/#/’ test.txt //在以IP开头的行的行首插入#
sed ‘1,5H;15,16G’ test.txt
执行多次命令
sed -ne ‘s/root/admin/’ -ne ‘s/bash/sh/p’ /etc/passwd //将root和bash动作替换
sed -ne ‘s/root/admin/;s/bash/sh/p’ /etc/passwd //将root和bash动作提黄
直接修改文件内容:-i 直接修改源文件内容,保存修改的文件
sed -i ‘s/^/#/’ /etc/passwd //在每行开头插入#号 ,直接修改源文件
DII

awk
awk工具介绍

awk也是一个功能强大的编辑工具,与sed一样,可在无交互的情况下实现相当复杂的文本操作
命令格式:
awk 选项 ‘模式或条件 {编辑指令}’ 文件1 文件2
> awk -f 脚本文件 文件1 文件2

工作原理:
逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令

awk内置变量
FS:指定每行文本的字段分隔符,缺省为空格或制表位。 注:默认分隔符为空格
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)

案例:
awk -F: ‘{print $0,NF}‘ /etc/passwd //输出以冒号为分隔的/etc/passwd文件中记录的字段段数
df -hT |awk ‘{print $1,$6}‘ //用awk截取命令df -hT输出的结果,不带任何条件,进行格式化,打印第1列和第6列数据
awk ‘{print $0}‘ /etc/passwd //输出所有内容
cat /etc/passwd grep "" /etc/passwd sed -n ‘p‘ /etc/passwd
打印文本内容:
awk ‘NR==1,NR==3{print}‘ bfile //输出第1至第3行内容
awk ‘NR==1||NR==3{print}‘ bfile //输出第1行、第3行内容
awk ‘/^root/{print}‘ /etc/passwd //输出以root开头的行
awk ‘/nologin$/{print}‘ /etc/passwd //输出以nologin结尾的行
awk ‘(NR>=1)&&(NR<=3){print}‘ /etc/passwd //输出第1行到第3行内容
awk "(NR%2)==1{print}‘ /etc/passwd //输出所有奇数行的内容
awk ‘(NR%2)==0{print}‘ /etc/passwd //输出所有偶数行的内容
awk -F: ‘!($3<900)‘ /etc/passwd //输出第3个字段不小于900的行,“!”号表示取反
在使用awk的过程中,可以使用关系运算符作为“条件”,用于比较数字与字符串,运算符大于(>)、小于(<)、小于等于(<=)、等于(==)、不等于(!=)
也可使用逻辑操作符&&,表示“与”,||表示“或”,!表示“非”
还可以进行简单的数学运算加(+)、减(—)、乘(*)、除(/)、取余(%)、乘方(^)。
只有当条件为真,才执行指定的动作。

awk -F: ‘{if($3>200)print $0}‘ /etc/passwd //输出第3个字段大于200的行
awk -F: ‘{max=($3>$4)?$3:$4;print max}‘ /etc/passwd
//如果第3个字段的值大于第4个字段的值,则把问号前表达式的值赋给max,否则就将冒号后那个表达式的值赋给max
awk -F: ‘{max=($3>200)?$3:$1;print max}‘ /etc/passwd // //如果第3个字段的值大于200,则把第3个字段的值赋给max,否则就将第1个字段的值赋给max
在使用awk过程中还可以使用条件表达式,条件表达式的运算涉及两个符号,冒号和问号,其实质就是if...else语句的捷径,有着if...else相同的结果

接字段输出文本
awk -F: ‘{print NR,$0}‘ /etc/passwd //输出处理数据的行号,每处理完一条记录,NR值加1
awk -F":" ‘$3<5{print $1 $3}‘/etc/passwd //输出第3列小于5的第1列与第3列数据
awk -F ":" ‘($1~"root")&&(NF==7){print $1,$3}‘/etc/passwd //输出包含7个字段,并且第1个字段中包含root的行第1与第2字段内容
awk -F":" ‘NR==3,NR==7{print $1,$7}‘ /etc/passwd //输出第3行到第7行中以冒号为分隔符的第1列与第7列的数据

输出数据时插入文本标签:
awk -F: ‘/^root/{print "Hi," $1}‘ /etc/passwd //输出以冒号为分隔符,以root开头的行第一列,且在前面插入“Hi,”
awk ‘{print $1"--"$3}‘ 6.txt //输出第一列和第二列并加入普通字符 引号引用普通字符
awk -F":" ‘$7~"/bash"{print $1}‘ /etc/passwd //输出冒号分隔且第7个字段中包含/bash的行的第1个字段
awk -F‘:‘‘{print $1":"$2":"$3":"$4}‘ /etc/passwd //保留原来的格式,输出以冒号为分隔,/etc/passwd文件的前4个字段
awk -F":" ‘{print $1,$3}‘ /etc/passwd //输出以冒号为分隔符的第1列和第3列
awk ‘BEGIN{FS=":"} {print $1,$3}‘ /etc/passwd //输出以冒号为分隔符的第1列和第3列
awk ‘BEGIN{X=0};/\/bin\/bash$/{x++};END{printx}‘ /etc/passwd //统计以/bin/bash为结尾的行数

awk执行顺序:首先执行BEGIN{}中的操作,然后从指定的文件中逐行读取数据,自动更新NF、NR、$0、$1等内建变量的值,去s执行‘模式或条件{编辑指令}’;最后执行END{}操作

处理命令输出的结果:
date |awk ‘{print "Month:"$2"\nYear:"$6}‘ //输出日期的第2列且在前面插入Month:,换行输出第6列并在前面插入Year
sort工具
分为:字符排序 ,数字排序
语法格式:
sort [选项] 参数
常用选项
-f :忽略大小写
-b :忽略每行前面的空格
-M :按照月份进行排序
-n :按照数字进行排序
-r :反向排序
-u :等同于uniq,表示相同的数据仅显示一行
-t :指定分隔符
-o :<输出文件> : 将排序后的结果转存指定文件 如:sort -t”;” /etc/passwd -o user.txt
-k :指定排序区域

uniq工具
用于报告或者忽略文件中的重要行
一般于sort 命令结合使用
语法
uniq [选项] 参数
常用选项
-c :进行计数
-d :仅显示重复行
-u :仅显示出现一次的行

原文地址:http://blog.51cto.com/14150862/2349158

时间: 2024-10-29 16:46:58

Linux 四剑客介绍和案例的相关文章

linux 四剑客 find 、grep、sed、awk整理

linux 四剑客 find .grep.sed.awk整理 find 主要是用于查找Linux 操作系统的某个文件.目录所在路径,查找出满足条件的文件或者目录的路径 find / -name *.rpm -type d -- ###/:表示是在根目录下进行查找 ###-type:查找的类型,d是目录,f是普通文件 find / -name "con*.log" -exec cp {} /tmp/ \; ####基于 find 查找 Linux 系统以.log 结尾,同时名称以 con

linux四剑客-grep/find/sed/awk/详解-技术流ken

1.四剑客简介 相信接触过linux的大家应该都学过或者听过四剑客,即sed,grep,find,awk,有人对其望而生畏,有人对其爱不释手.参数太多,变化形式太多,使用超级灵活,让一部分人难以适从继而望而生畏,浅尝辄止即罢.有人熟练掌握,使其四剑客为己所用,在分析日志,分析文本,统计,批量修改中游刃有余,大大提高了工作效率.本篇博文将详细讲解四剑客的参数选项,以及使用案例,相信认真读完本篇博文你也可以使得四剑客真正为己所用. 2.四剑客之grep 1.几个概念 正则表达式:Regular Ex

Linux 命令之 linux 四剑客

Linux命令-- 四剑客 一:Linux命令 之 AWK 符号:^ 开头 $ 结尾 awk 是一种处理文本的语言,一个强大的文本分析命令! 1:提取文件中的每行的第二个 提取前文本中内容为  命令:cat 1.txt | awk '{print($2)}' 在 AWK 命令中,它将文本每列的部分当做一部分! 或着我们可以指定分隔符,指定提取某一部分! 我们以2为分隔符 命令:cat 1.txt | awk -F "2" '{print($2)}'  输出前三行 打印文件每行最后的字段

linux四剑客常用命令汇总

**四剑客常用命令汇总** 1.find find path -option [ -print ] [ -exec -ok command ] {} (find 查找路径 -type f/d -name ..... -size 1k/M -mtime/atime/ctime +-9 文件) find -type/-perm/-empty/ find /tmp -type f -name "*.tmp" -exec rm -rf '{}' \; find / -type f -name

Linux四剑客

有四个剑客,他们很厉害 Find 查询命令,就是find 1 2 usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] 常用参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 -name file #查找名为file的文件: -

Linux四剑客find/grep/awk/sed

find ./ -name "*txt" -maxdepth 1 -type f -mtime -2 -exec mv {} ./bbb.txt \; 这条命令表示找当前目录(-maxdepth 1,没这条是递归找当前目录的所有子目录)且是文件的(-type f)且两天以内创建的(-mtime -2,如果是+2表示两天前创建的,还可以-mmin以分钟为单位),且名字是匹配*txt(linux通配符和regex不同,linux自带的特殊字符 必须在""内)然后将这些文

六十四、Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做

一.Linux监控平台介绍 cacti.nagios.zabbix.smokeping.open-falcon等等 cacti.smokeping偏向于基础监控,成图非常漂亮 cacti.nagios.zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图. open-falcon为小米公司开发,开源后受到诸多大

PLSQL_R12 MOAC多组织的四个应用(案例)

2014-05-31 BaoXinjian In Capgemini 一.摘要 R12 Form 或者其他二次开发时,很多情况下会涉及R12 MOAC多组织开发,以下介绍了4个常见的应用,还请学友继续补充 1. 开发时打开Form自动弹出组织选择实现方式(增加Choose ORG功能) 2. 开发时打开Form中有组织LOV选择实现方式 3. R12多组织的技术实现方式-VPD技术 4. VPD技术详解,数据库安全策略 二.案例 案例1.开发时打开Form自动弹出组织选择实现方式(增加Choos

linux的基本介绍和命令行

<linux的基本介绍和命令行> [什么是Shell] (1)简介:shell是一款保护内核的软件.bash是shell的一个版本. 性质:命令解析器 用途:接受用户命令 1)在计算机科学中,shell俗称壳(用来区别核),是指"提供使用者使用界面"的软件(命令解析器).他类似于DOS和后来的cmd.exe.他接收用户命令,然后调用相应的应用程序.同时他又是一种程序设计语言.作为命令语言,他交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串命令:作为程序