快速掌握Linux三剑客命令使用
前言
Linux三剑客指的是grep、sed以及awk命令的使用,这三个命令功能异常强大,大到没朋友。grep命令主打“查找”,sed命令主打“编辑”,awk命令主打“分割处理”。
下面给和网管相关的几个例子看看实用的效果,改进建议也经常会用这些命令写自动化脚本。如果以下例子秒懂,那不用看了,该干嘛干嘛。
1、扫描本地ip地址
ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | sed 's/addr://g'
2、扫描端口号被哪个进程占用
netstat -anp | awk '{print $4,$7}' | grep 31006 | sed -n '1p' | awk '{print $2}' | awk -F'/' '{print $1}' | xargs ps -lfp | sed -n '2p' | awk '{print $17}'
3、获取某个进程的堆栈
ps -elf | grep -v grep | grep necomm_agent | awk '{print $4}' | xargs gstack > yp.txt
4、批量重命名网元license备份的文件名
for i in `ls`; do mv -f $i `echo $i | sed 's/^[a-zA-Z0-9].*_[a-zA-Z0-9].*_\([0-9]\{8\}\)\(_\)\([0-9]\{6\}\)\(\.txt\)$/Lic_Esn_\1\2\3/'`; done
5、统计某个文件夹下的文件占用的字节数
ls -l | awk 'BEGIN {size=0;} {size = size + $5;} END{print “[end]size is ”, size/1024,1024, “M”}'
里面有几个知识点先行赘述。
1、 何时需要xargs?
1) 有些命令本身是不支持管道,这个时候要加xargs,本身支持管道的命令有限如
cut grep sort uniq wc tee join split等
如下面的例子
echo “/opt” | ls –l //ls本身是不支持管道,所以对于前面管道输出的内容会忽略,不会输出/opt目录下内容 echo “/opt” | xargs ls –l //加上xargs,执行的结果就是输出/opt下目录的内容
2) 命令虽然支持管道,但如果不加xargs和加xargs意义也截然不同。
比如网管中经常用到到在某个目录下查找某个abc字符串:
find ./ | grep “abc” //这个命令不会在目录下文件查找,而是把find出来的内容中查找,相当于在一群文件名中查找是否有包含abc的文件名。 find ./ | xargs grep “abc” //这个命令是把find出来的东西当做参数传递给管道后的内容,相当于在find出来的文件内容中查找是否包含字符串abc。
2、 正则表达式
一个正则表达式通常被称为一个模式,用来描述或匹配一系列符合某个语法规则的字符串。正则表达式有多重不同的风格,但大同小异,下面列出PCRE中常用的元字符和意义。POSIX正则表达式分为基本正则表达式(BRE)和扩展表达式(ERE)。
目前很多UNIX工具程序沿用某一种正则表达式形式来强化本身的功能。常用的包括
1) grep工具组:grep和egrep
2) 改变输入流的sed流编辑器
3) 字符串处理程序语言:awk
4) 文件查询程序:more、less
5) 文本编辑器:vi
字符 |
意义 |
支持的类型 |
\ |
将下一个字符标记为特殊字符,或者将一个元字符转义为普通字符。如n加上\匹配一个换行符。\\则匹配一个\字符。 |
BOTH |
^ |
匹配输入字符串的开始位置 |
BOTH |
$ |
匹配输入字符串的结束位置 |
BOTH |
* |
匹配前面的子表达式0次或者多次,如zo*能匹配z和zoo |
BOTH |
? |
匹配前面的子表达式0次或者1次 |
ERE |
. |
匹配除\n之外的任何单个字符 |
BOTH |
+ |
匹配前面的子表达式1次或者多次,如zo+能匹配zo和zoo,但不能匹配z |
ERE |
| |
匹配于|符号前或后的正则表达式 |
ERE |
{n,m} |
最少匹配n次,最多匹配m次和BRE的区别是不需要加\ |
ERE |
\{n\} |
匹配前面的子表达式n次 |
BRE |
\{n,\} |
至少匹配前面的子表达式n次 |
BRE |
\{n,m\} |
最少匹配n次,最多匹配m次 |
BRE |
\(\) |
将\(与\)间的模式存储在特殊的保留空间 |
BRE |
\digit |
重复在\(与\)方括号内第n个子模式至此点的模式 |
BRE |
[xyz] |
匹配xyz中的任何一个字符 |
BOTH |
[^xyz] |
匹配未包含的任意字符 |
BOTH |
[x-z] |
匹配小写的字符 |
BOTH |
如:
grep ‘a\{3\}’ test.txt \\查找test.txt中包含3个a的行 grep ‘^aa’ test.txt \\查找test.txt中以aa开头的行 grep ‘^$’ test.txt \\查找所有空行
后向引用
后向引用指的是“匹配于正则表达式匹配的先前的部分”。后向引用只在BRE中存在。使用后向引用的步骤有两步。
1、 将子表达式包围在\(与\)里,单个模式里可包含最多9个子表达式
2、 在模式之后使用\digit,digit是介于1至9的数字,指的是“匹配于第n个先前方括号内子表达式匹配成功的字符”
grep ‘\(why\).*\1’ test.txt \\一行里可以匹配why..why grep ‘\(ab\)\(cd\)[def]*\2\1’ test.txt \\匹配abcddcdab
\< \>
匹配单词的开头与结尾。单词是由字母、数字及下划线组成。
以下图为各种UNIX程序与其使用的正则表达式
类型 |
Grep |
sed |
vi |
more |
egrep |
awk |
BRE |
√ |
√ |
√ |
√ |
||
ERE |
√ |
√ |
||||
\< \> |
√ |
√ |
√ |
√ |
好,进入正题。
一、 grep命令
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,其格式如下:
grep [选项] pattern file
常用的选项
-v 过滤指定字符串内容的行
-i 不区分大小写
-n 顺便打印出行号
-c 计算出符合行的次数
-E 默认grep只支持基本的正则表达式,加上-E支持扩展的正则表达式,grep –E和egrep意义一样,扩展的正则表达式有’+’,’?’,’|’,’()’
常用的命令
ps –elf | grep –v grep | grep “necomm_agent” //如果不加grep –v grep,输出2条内容 grep –i ‘abc’ test.txt//忽略大小写,找出test.txt包含abc的行 grep –v ‘^$’ test.txt > testnew.txt //过滤test.txt的空行
二、 sed命令
sed是操作、过滤和转换文本内容的强大工具,常用功能增删改查,过滤,取行。
格式如下:
sed [options] [sed-commands] [input-file]
sed [选项] [sed命令] [输入文件]
说明:
options常用的有:
-n :抑制默认输出
-e 执行多条编辑命令
-i:直接在原文件中修改
sed-commands既可以是单个sed命令,也可以是多个sed命令组合
input-file(输入文件)是可选项,sed还能够从标准输入如管道获取输入
工作原理
sed是从文件或管道中读取一行,放在模式空间中,进行处理,处理完输出一行;再读取一行,再处理一行
模式空间:sed内部的一个临时缓存,用于存放读取到的内容
1)增
a 追加文本到指定行后
i 插入文本到指定行前
i 单行增加
sed '2a abc' test.txt sed '2i abc' test.txt
ii 增加多行
sed '2a abc\ cde' test.txt
指定执行的地址范围
sed可以对单行或多行进行处理,如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
用法 n1[,n2] {sed-commands}
地址用逗号分隔的,n1,n2可以是数字、正则表达式、或两者的组合表示。$表示最后一行。
/abc/,/fff/{sed-commands} //对匹配abc的行到匹配fff的行操作
2)删
d 删除指定的行
sed '/aaa/d' test.txt
3)改
i c用新行取代旧行
sed '2c abc' test.txt
ii 文本替换
sed 's/abc/bcd/g' test.txt //后面的g代表全局替换,如果不加g,只替换每行第一个匹配的字符串 sed ‘s/^/abc /’ test.txt //在test.txt每行前插入abc sed -i '/aaa/s/abc/bcd/g' test.txt //加上-i代表修改了文件test.txt
替换部分有几个特殊的元字符,它们分别是
&:被pattern匹配的内容
\num:被pattern匹配的第num个分组(正则表达式的概念,\(…\)括起来的部分成为分组)
sed '/d/s/ab/&jj/' test.txt //将匹配d内容的行中的ab替换为abjj echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' //将命令中的digit 7 修改为7
4)查
p 输出指定内容,但默认会输出2次匹配的结果,因此使用n取消默认输出
按行查询
sed -n '2p' test.txt
按字符串查询
sed –n ‘/abc/p’ test.txt
混合查询
sed –n ‘2,/abc/p’ test.txt
5)多命令编辑
sed -e '1,5d' -e 's/test/check/' test.txt
三、awk命令
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生产报告时,显得尤为强大。简单的说就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法
awk [-F field-separator] '{pattern + action}' {filename}
pattern表示awk在数据库中查找的内容,action表示找到匹配内容所执行的一系列命令,pattern就是要表示的正则表达式,用斜杠括起来。
-F 域分隔符 是可选的,如果不指定,默认的域分隔符是空格
awk '{print $1}' cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
执行流程为:先执行BEGIN,然后读取文件,读入有\n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。
然后开始读入第二条记录.....直到所有的记录都读完,最后执行END操作
常用的命令
awk -F: '/^root/' /etc/passwd //如果没有指定action,默认输出每行的内容 awk -F: '/^ftp/{print $4}' /etc/passwd //指定了action ls -l|awk '/^[^d]/ {print $9"\t"$5} {tot+=$5} END{print "totKB:" tot}'
统计某个文件夹下的文件占用的字节数
ls -l | awk 'BEGIN {size=0;} {size = size + $5;} END{print “[end]size is ”, size/1024,1024, “M”}'
awk的编程是从C语言借鉴过来的,所以语法类似
如test.txt中包含姓名和各科成绩,输出姓名和最大成绩
awk 'BEGIN {MAX=0;} {NAME = $1; for(x=2; x<=NF; x++) { if($x >= MAX) { MAX=$x}} printf "name:%s MAX:%d\n", NAME,MAX; MAX=0}' test.txt
快速掌握Linux三剑客命令使用的更多相关文章
- linux 三剑客命令(grep,sed ,awk)
grep 命令 :强大的文本’搜索’工具 1.grep -n 'word' file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号. 2 ...
- 快速操作Linux终端命令行的快捷键列表
终端有很多快捷键,不太好记,常用的在这里 Ctrl+r 实现快速检索使用过的历史命令.Ctrl+r中r是retrieve中r.Ctrl+a:光标回到命令行首. (a:ahead)Ctrl+e:光标回到 ...
- Linux三剑客命令使用(持续更新)
(本文档内容部分来源于网络) awk删除文件第一列 1.采用awk awk '{$1="";print $0}' file 2.采用sed sed -e 's/[^]* //' f ...
- Linux常用基本命令:三剑客命令之-awk基础用法
awk是一个超级强大的文本格式化处理工具,他与grep, sed命令被成为linux 三剑客命令 三剑客命令的特点: grep:只要用来匹配和查找文本 sed: 编辑匹配到文本 awk: 格式化文本, ...
- Linux实战教学笔记12:linux三剑客之sed命令精讲
第十二节 linux三剑客之sed命令精讲 标签(空格分隔): Linux实战教学笔记-陈思齐 ---更多资料点我查看 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件 ...
- [转]Linux Shell History (快速使用Linux命令)
http://www.blogjava.net/lihao336/archive/2010/10/11/334367.html Linux Shell History (快速使用Linux命令) Li ...
- Linux awk命令 --三剑客老大
Linux awk命令 --三剑客老大 基本用法: awk [参数] ['找谁{干啥}'] 文件 参数: -F 分隔符 -v 创建或修改awk变量 OFS 输出分割符 awk显示每一列的时候分隔 ...
- 【学习总结】快速上手Linux玩转典型应用-第6章-linux常用命令讲解
课程目录链接 快速上手Linux玩转典型应用-目录 目录 1. 软件操作命令 2. 服务器硬件资源信息 3. 文件操作命令 4. Linux文本编辑神器vim与其他常用命令 5. 系统用户操作命令 6 ...
- day14 linux三剑客之sed命令
day14 linux三剑客之sed命令 sed命令 Sed 主要用来自动编辑一个或多个文件.简化对文件的反复操作.编写转换程序等. sed(流式编辑器) : sed主要用来修改文件. 1.sed命令 ...
- Linux 三剑客之 awk 实战详解教程
我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...
随机推荐
- curl 命令工具
curl工具 简介 curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS,HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议. ...
- Java基础——数组的初始化与赋值、循环遍历,Random随机数[大于等于0,小于所给值)
package com.zhao.demo; public class Demo05 { //数组的静态初始化 /*public static void main(String[] args) { i ...
- PostScript语言教程(六、图形变换)
6.1.坐标系变换 POSTSCRIPT图形操作是在一个坐标系中,这个坐标系被称为用户坐标系或用户空间,该坐标系独立于任何物理设备.POSTSCRIPT在用户空间中进行绘制,并将结果传输到特定的打印机 ...
- 作业三:CART回归树
作业三:CART回归树 20大数据三班 博客链接 学号 201613336 问题一: 表1为拖欠贷款人员训练样本数据集,使用CART算法基于该表数据构造决策树模型,并使用表2中测试样本集确定剪枝后的最 ...
- bzoj 4573
LCT神题... 首先暴力的做法就是每次在一个区间上link,然后暴力查询,时间复杂度$O(爆炸)$ 但是我们可以发现的是,每棵树之间互不影响! 因此我们可以考虑离线之后分别统计每棵树 但是这样做其实 ...
- eclipse创建基于Web的Maven项目
用于方便查找 以下是原博主链接 https://www.cnblogs.com/sam-uncle/p/8676529.html 如何使用maven搭建web项目呢? 第一步:首先创建一个maven项 ...
- javaScript事件onmouseout 、 onmouseove
javaScript事件onmouseout . onmouseove onmouseout: 鼠标从某元素移开 onmouseover: 鼠标被移到某元素之上 这两个事件是鼠标滑过元素是的效果,可以 ...
- js 实现全屏预览(F11功能)--转
参考文档 http://t.zoukankan.com/ghfjj-p-6322415.html HTML代码 <body> <div id="content" ...
- 如何在VM虚拟机里建立Linux操作系统
1.新建虚拟机 2.选择典型安装 3.选择稍后安装操作系统 4.选择Linux操作系统和CentOS 7 64位 5.选择文件路径 注意:建议每台虚拟机单独文件夹保存,并且此处路径最好不要有中文出现 ...
- 说一说webpack的配置文件
可能有一些友友会奇怪为什么在写webpack的配置文件的时候,我们只能用commonJS导出. 原因:在打包的时候需要运行webpack的配置文件里面的代码,而webpack在打包运行的环境在node ...