`
qindongliang1922
  • 浏览: 2190261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117705
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126115
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60056
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71433
社区版块
存档分类
最新评论

Linux常用命令之文本分析(六)

阅读更多
1.grep
cat file | grep key :在file中检索包含key的行
key可以是正则,特殊字符需要转意

grep -E 正则表达式:
示例:cat /etc/services | grep -E "^#"   #打印所有注释行

egrep:一次查询匹配多个内容
例如:egrep '2020|892|10005' /etc/services


2.sed
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

格式:sed [options] 'command' file(s)

实例:
1)删除:d命令 
sed '2d' example-----删除example文件的第二行。

sed '2,$d' example-----删除example文件的第二行到末尾所有行。 

sed '$d' example-----删除example文件的最后一行。
 
sed '/test/'d example-----删除example文件所有包含test的行。

2)替换:s命令 
sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。 

sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。

sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。 

sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。 

sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。

3)选定行的范围:逗号 
sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。 
例子:sed -n '/38685518/,/38685524/p' 123456.csv  按连续内容截取
grep也有类似方法:
countnum=$[ $endnum - $startnum + 1  ]
grep "$startnum" $file -A $countnum

sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。 

sed -n '1,100p' example  -----打印第1行到第100百行



sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。

4)多点编辑:e命令 
sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。 

sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。

3.awk
awk是一个强大的文本分析工具,在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
格式:awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

示例:
1)如果只是显示/etc/passwd的账户
cat /etc/passwd |awk  -F ':'  '{print $1}' 

2)如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'

3)如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割
a.而且在所有行添加列名name,shell
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7}'

b.在最后一行添加"blue,/bin/nosh"。
cat /etc/passwd |awk  -F ':'  '{print $1","$7} END {print "blue,/bin/nosh"}'

c.ab前后都加
cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'

4)搜索/etc/passwd有root关键字的所有行
awk -F: '/root/' /etc/passwd #正则

5)搜索/etc/passwd有root关键字的所有行,并显示对应的shell
awk -F: '/root/{print $7}' /etc/passwd

A.awk内置变量
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

示例:
1)统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容
awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd

使用printf替代print,可以让代码更加简洁,易读
awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

B.print和printf
awk中同时提供了print和printf两种打印输出的函数。

其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。

printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

C.awk编程
示例:
1.awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
count是自定义变量。之前的action{}里都是只有一个print,其实print只是一个语句,而action{}可以有多个语句,以;号隔开。

这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:
awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd


2.统计某个文件夹下的文件占用的字节数,单位M
ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'

D.条件语句
awk中的条件语句是从C语言中借鉴来的,见如下声明方式:
if (expression) {
    statement;
    statement;
    ... ...
}

if (expression) {
    statement;
} else {
    statement2;
}

if (expression) {
    statement1;
} else if (expression1) {
    statement2;
} else {
    statement3;
}

示例:
1.检测系统中UID为0的用户
awk -F : '{if($3==0) {print $1}}' /etc/passwd
简写:
awk -F : '$3==0 {print $1}' /etc/passwd
-F表示使用什么做为分隔符,这里使用冒号,默认是空格
$num表示文件的第几列
'':固定格式,执行命令,这里表示,如果第三列是0,则打印第一列的内容

2.检测系统中密码为空的用户
awk -F : '{if(length($2)==0) {print $1}}' /etc/passwd
简写:
awk -F : 'length($2)==0 {print $1}' /etc/passwd

3.取出第三行,第一列的值
df -h | awk '{if(NR==3) {print $1}}'
简写:
df -h | awk 'NR==3 {print $1}'


E.数组
awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等

示例:
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++){print i, name[i]}}' /etc/passwd

简写:
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd

F.循环语句
awk中的循环语句同样借鉴于C语言,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。


4.tr
替换文件中的内容
cat file | tr 'do' 'hp' :将file中内容为do替换为hp
分享到:
评论

相关推荐

    linux常用命令大全.pdf

    ### Linux常用命令详解 #### 一、文件管理 1. **ls**:此命令用于列出当前目录中的文件和子目录。通过使用不同的选项,可以改变其输出格式。 - `-l`:使用长格式列表输出,包括文件权限、拥有者、组、大小等详细...

    最全Linux常用命令大全-linux常用命令全集

    "最全Linux常用命令大全-linux常用命令全集" 本文档对 Linux 中最常用的命令进行了详细的总结和说明,涵盖了文件和目录管理、磁盘空间管理等方面的命令。 文件和目录管理命令 1. `pwd` 命令:显示当前目录 `pwd`...

    Linux常用命令.pdf

    以下是对PDF文件中提到的一些常用Linux命令的详细解释。 **ls命令**: 1. **命令格式**:`ls [选项] [文件或目录]` 2. **命令功能**:用于列出当前目录下的文件和子目录。不加任何参数时,它会显示所有非隐藏文件和...

    Linux常用命令详解.pdf

    ### Linux常用命令详解知识点 #### 一、命令格式与通配符 - **命令格式**: - **命令**:指定要执行的操作。 - **选项**:改变命令的行为方式,通常以`-`开头,多个选项可以用空格或直接连接的方式给出。 - **...

    LINUX常用命令语言

    LINUX 常用命令语言总结 LINUX 操作系统提供了大量的命令语言,以下是常用的命令语言概述: 1. 远程桌面连接命令:mstsc mstsc 是一种远程桌面连接命令,可以连接到另一台计算机,并在远程桌面上进行操作。 2. ...

    Linux常用命令、Linux常用命令

    以上只是Linux常用命令的一小部分,实际上还有许多其他命令,如`cp`(复制文件)、`mv`(移动文件)、`rm`(删除文件)、`mkdir`(创建目录)、`rmdir`(删除目录)、`ls`(列出目录内容)、`cd`(切换目录)、`pwd`...

    Linux常用命令文档和命令大全

    本压缩包文件"Linux常用命令文档和命令大全"包含了两份宝贵的资源,分别是"Linux命令大全(修改版).chm"和"Linux学习笔记.doc",它们都是深入理解和熟练掌握Linux操作系统的宝贵资料。 "Linux命令大全(修改版).chm...

    Linux常用命令总结

    Linux常用命令是任何使用Linux操作系统的人必须熟悉的工具。这些命令通常通过命令行界面(CLI)执行,是与系统交互的主要方式。以下是一些Linux系统中最常用命令的详细说明: 1. ls命令:用于列出目录内容。ls -l ...

    linux 常用命令 vi命令

    在Linux操作系统中,掌握一些常用命令是至关重要的,特别是对于初学者或正在学习Linux的同学。本文将主要聚焦于“vi”命令,一个强大的文本编辑器,以及与之相关的其他Linux命令。 **一、vi编辑器** vi(Visual ...

    Linux常用命令-API手册.zip

    本压缩包"Linux常用命令-API手册.zip"包含了两个重要的参考资料:"Linux基础命令教程豪华版.chm"和"Linux常用命令大全.chm",它们为用户提供详尽的Linux命令学习指南。 "Linux基础命令教程豪华版.chm"可能是对Linux...

    linux常用命令集

    这本"Linux常用命令集"电子书,提供了一个全面的指南,涵盖了新手到高级用户都需要了解的各种命令。以下是一些重要的Linux命令及其应用: 1. **ls**:用于列出目录内容,通过参数 `-l` 可以以详细格式显示,`-a` ...

    linux常用命令.doc

    Linux文件的复制、删除和移动命令 Linux目录的创建与删除命令 Linux文本处理命令  Linux备份与压缩命令 在Linux环境下运行DOS命令 Linux与用户有关的命令  Linux系统管理命令 Linux磁盘管理 

    Linux常用命令经典解释

    【Linux常用命令经典解释】 在Linux操作系统中,掌握一些常用的命令是提高工作效率的关键。本文将重点解析几个核心的命令:`tar`、`vi`以及如何在Linux下安装和卸载软件。 首先,我们来看看`tar`命令,它是Linux中...

    Linux常用命令全集.zip

    本资料"Linux常用命令全集.zip"包含了丰富的Linux命令知识,旨在帮助用户深入理解并应用这些命令。CHM文档是一种常见的Windows帮助文件格式,它将HTML页面集合在一个文件中,方便用户查阅。 以下是一些主要的Linux...

    Linux常用命令全集

    本资源“Linux常用命令全集”提供了一个全面且实用的参考指南,旨在帮助用户快速查找并理解常用的Linux命令。 1. **Linux命令基础** - **ls**:列出目录内容,常用选项如 `-l` 以详细格式显示,`-a` 显示所有文件...

    Linux常用命令文档

    CHM文件中的“Linux常用命令文档”应该详细介绍了这些命令的用法、参数以及实例,对于学习和日常工作中查找帮助非常有用。通过深入学习和实践这些命令,你将能够更加熟练地在Linux环境中工作,提高效率并解决各种...

    linux常用命令大全

    在深入探讨Linux常用命令之前,我们首先应当理解Linux操作系统的核心理念与优势,它是一个免费、开源的操作系统,因其稳定性和安全性而广泛应用于服务器领域。掌握Linux命令行是每一位IT专业人士的必备技能,以下是...

    Linux常用命令大全

    本资料“Linux常用命令大全”详细汇总了Linux环境中最常用的命令,旨在为用户提供全面的学习参考。 1. 文件和目录管理: - `ls`:列出目录内容,可以使用 `-l` 显示详细信息,`-a` 显示所有文件,包括隐藏文件。 ...

Global site tag (gtag.js) - Google Analytics