`
hanqunfeng
  • 浏览: 1543303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

程序员必知必会----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命令

    ### 程序员必会的 Linux 命令 #### 一、查找文件 - **Find**: `find` 命令用于在文件系统中查找文件或目录。 - **基本格式**:`find [搜索起点] [选项]` - **示例**: - `find / -name filename.txt`:在根目录...

    程序员必知必会linux基础知识

    用户必知必会的Linux常用命令之【基础命令】包括了对文件和目录的创建、删除、移动、复制等操作的命令。这些是进行Linux系统日常维护和操作时,使用频率最高的命令。 【vim】作为程序员的编辑器,是Linux系统中必不...

    超强版linux程序员手册

    2. **Linux命令行工具**:书中详细列举并解释了数百个常用的Linux命令,包括文件和目录管理、文本处理、系统监控、网络通信等,这些都是日常开发和系统维护中的必备技能。 3. **C/C++编程**:作为Linux系统编程的...

    Linux常用命令全集

    在IT领域,Linux操作系统是开发者、系统管理员和程序员的重要工具。了解并熟练使用Linux命令行是成为高效Linux用户的关键。本篇文章将详细讲解Linux入门...希望这份Linux常用命令全集能为你的学习之路提供宝贵的指引。

    linux程序员从入门到精通----初学者必看.pdf

    如`find`命令用于查找文件,`man`用于查看命令帮助,`grep`用于在文件中搜索特定文本,`dd`用于数据转换和复制,`tar`用于文件打包和压缩等。熟练掌握这些命令,能大幅提升工作效率。 3. **选择合适的工具书**:...

    linux常用命令大全eb-mas开发笔记

    本篇将详细介绍Linux常用命令及其应用,帮助你提升工作效率。 1. **ls** 命令:用于列出目录中的文件和子目录。通过添加选项如 `-l`(长格式)可显示详细信息,`-a`(显示所有文件,包括隐藏文件)可以查看通常不...

    Linux常用命令Linux常用命令

    这篇内容将深入讲解一些常用的Linux命令,帮助初学者更好地理解和操作Linux系统。 1. **ls**:用于列出目录中的文件和子目录。例如,`ls -l`可以显示详细信息,包括权限、所有者、大小和修改日期。 2. **cd**:...

    jdk-8u161-linux-x64.tar.gz.zip

    JDK(Java Development Kit)是Java编程语言的开发环境,是Java程序员必不可少的工具。在本篇文章中,我们将聚焦于JDK 8u161的Linux 64位版本,通过其压缩文件"jdk-8u161-linux-x64.tar.gz.zip"来探讨其中的关键知识...

    jdk-11.0.16Linux版本

    **Java Development Kit (JDK) 11.0.16 for Linux** JDK,全称为Java Development Kit,是Oracle公司提供的用于开发和运行Java应用程序的软件开发工具包。Java是一种广泛使用的编程语言,以其“一次编写,到处运行”...

    Linux系统中Vi常用命令及高级应用

    在Linux系统中,Vi(Visual Editor)是一个强大的文本编辑器,对于系统管理员和程序员来说是必不可少的工具。Vi分为两种模式:命令模式和插入模式。在命令模式下,用户可以通过键盘输入各种命令来操作文本,而在插入...

    Linux命令集合

    Linux命令集合提供了常用的操作指令,帮助程序员高效地进行系统管理、文件操作、网络通信等任务。以下是一些核心的Linux命令及其应用场景的详细解释: 1. **ls**:用于列出目录中的文件和子目录。通过添加参数,如`...

    程序员的鄙视李安

    文本编辑器和集成开发环境(IDE)是程序员日常工作中必不可少的工具。在部分内容中提到了多个编辑器和IDE的例子,如: - **Vim**和**Emacs**是非常流行的命令行文本编辑器,尤其受Unix/Linux用户的喜爱。 - **Atom**、...

    jdk-14.0.1_linux-x64_bin.tar.zip

    JDK(Java Development Kit)是Oracle公司发布的Java开发工具包,对于Java程序员来说,它是必不可少的工具。JDK 14.0.1是Java的一个重要版本,它包含了许多新特性和改进。在Linux环境下,正确安装和配置JDK对于Java...

    《Java 程序员眼中的 Linux》.zip

    同时,Linux下的进程管理,如使用`ps`查看进程,`kill`发送信号终止进程,以及`nohup`和`&`后台运行命令,对于运行Java服务是必不可少的。 Linux还提供了强大的网络工具,如`netstat`用于查看网络连接状态,`...

    shell常用命令

    Shell是Linux系统中的一种命令行解释器,它允许用户通过命令行与操作系统进行交互。对于初学者和中级程序员来说,掌握...记住,练习是掌握任何技能的关键,尝试在实际场景中应用这些命令,你会发现它们的强大之处。

    linux c高级程序员指南

    《Linux C高级程序员指南》是一本专为有志于深入Linux环境下的C语言编程的开发者编写的书籍。这本书旨在帮助读者提升在Linux平台上的C语言编程技能,掌握系统级编程和底层开发的关键技术。 首先,C语言是计算机科学...

    Linux网络操作系统基础:常用文本编辑器.pptx

    本篇将详细介绍几种常见的Linux文本编辑器,包括emacs、nano、gedit和kedit,帮助用户理解各自的特点和使用场景。 首先,emacs是一款极其强大的编辑器,几乎可以被视为一个操作系统。它提供了丰富的内置功能,如...

    linux中强大编辑器vi命令集锦

    vi编辑器虽然初看之下可能显得复杂且难以掌握,但它强大的功能和灵活性使得它成为Linux系统中最受欢迎的文本编辑工具之一。通过本文介绍的基础命令和技巧,你应该能够快速上手,并逐步探索更多高级功能,以满足日常...

    Linux文本编辑器的通用功能[借鉴].pdf

    Linux操作系统中的文本编辑器是软件开发过程中的必备工具,尤其对于系统管理员和程序员而言,熟练掌握文本...在日常工作中,不断实践和探索各种编辑器的命令,可以提升Linux文本编辑的技能,更好地适应软件开发的需求。

    Linux使用文本编辑器vi常用命令

    掌握vi/vim编辑器的常用命令是Linux用户必备技能之一,它能够高效地处理文本和配置文件。通过熟练使用这些命令,可以大幅提升工作效率。不断实践和学习,你将能够更加自如地在vi/vim环境中工作,无论是编辑简单的...

Global site tag (gtag.js) - Google Analytics