Linux中常用文件字符串分析的命令
在linux中文件管理与系统管理的方面,经常会用到要从一个文件中或者一长串字符串中提取你所需要的数据,或者某些字段来进行查看或者分析,作为一个初级linux小菜鸟,我大体总结整理了几个常用的分析命令,希望能互相交流与探讨下。
主要是管道命令中的几个命令: grep,sed,awk,cut,wc,split,printf

由于篇幅有限,仅仅对每个命令常用的方法进行列举

数据流重定位:

1.标准输入:代码为0,使用<或者<<

2.标准输出:代码为1,使用>或者>>

3.标准错误输出:代码为2,使用2>或者2>>

输出中,>和2>当文件不存在则创建一个新的,否则就先清空文件内容,再将数据写入。

>>和2>>当文件不存在则创建新的,否则就将内容追加到原来的文件上。

例如ll /home >test 2>&1,这是一种把错误信息和正确内容同时输入到一个文件中。

输入中:cat > test,这个可以在命令行中输入内容,且最终将结果写入到test文件中,使用ctrl+d结束。

cat >cattest < ~/test,将test的内容直接写到cattest中,

cat >cattest <<"1",代表当遇到这个字符1的时候停止输入。

管道命令的基本用法
command1 | command2 | command3
管道命令可以直接在”|” 后面直接使用,也可以直接后面接要操作的文件数据名
1, grep
它主要是将给定的字符串在要进行比对的文件数据中,进行字符串的查找,将符合条件的字符串打印出来,它主要是以行为单位进行处理的,最后以整行为单位来进行显示。
格式:
grep
[-cinv] [-A] [-B] pattern filename 
参数说明:
-c : 只输出匹配的总次数
-i : 忽略大小写 
-n : 仅仅显示匹配的行号,及匹配的行 
-v : 反向选择,显示没有keyword的行
-A: 后面加数字,为after,除了列出匹配的行,再将后续的n行列出来
-B: 后面加数字,为before,除了列出匹配的行,再将前面的n行列出来
Pattern为具体的要查找的字符串,如“root”或者是“正则表达式”
正则表达式:
^word 待查找的word在行首
word$ 待查找的word在行尾
. 代表任意一个字符
* 重复前一个字符0到无穷多次
[abc] 从字符集合中选取一个,仅仅有其中一个,即a或者b或者c
[n1-n2] ,从字符集合的选取范围内查属于其中的一个字符
[^list] 不属于该字符串的范围的字符
\{n,m\}, 连续n到m个前一个字符
^$ 代表的是空行号
example:
#获取行首字符为the的行
grep -n '^the' filename
#获取一个任意f???d字符串,使用三个.
Grep -n 'f...d' filename
#获取至少有2个“e”的字符,如feed,geeed
grep -n ‘feee*d’ filename
#获取一个空行号
grep -n '^$' filename

2,sed
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern
space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程
主要用来对数据进行替换,删除,新增,选取特定行,它主要是以行为单位的
格式:
sed
[-nefr] [[n1[,n2]]
function] 
参数说明: 
-n : 使用安静(silent)模式,默认况下所有来自STDIN的数据都会显示在屏幕上,
加上-n则只有经过sed处理才显示 
-e : 直接在命令行模式上进行sed的操作编辑,主要是多点编辑,一行可以处理多个命令
-f : 直接将sed操作写在一个文件内,-f
filename 则可以执行文件内sed操作
-r : sed操作支持的是扩展正则表达式语法(默认为基础正则)
-i:
直接修改读取的文件内容,会真正的修改原始文档
操作说明: [n1[,n2]]
function
function参数:
a :新增,a后面可以接字符串,字符串会在当前的下一行出现 
c :替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行 
d :删除,不需接任何内容 
i :插入,i后面接字符串,字符串在当前的上一行出现 
p :打印,打印某个选择的数据,通常与sed
-n一起运行 
s :搜索,不但可以搜索,还可以替换,如:1,20s/old/new/g
sed后面的动作一定是要用‘’括住

example:
#删除2到5行直接的数据
cat -n /etc/passwd | sed '2,5d'
#删除第2行到最后一行的数据
cat -n /etc/passwd | sed '2,$d'
#在第2行后加一条字符串,(在第二行前用2i)
cat -n /etc/passwd | sed '2a hello word'
sed执行动作的时候,读取到相应的function后即开始处理,后面若有字符串就当作是要操作的字符串
同时添加多行的时候,每一行数据后面紧跟”\”,单引号要最后使用
#将第2行到第5行替换为“hello
world”
cat -n /etc/passwd
| sed ‘2,5c hello world’
#将第2行到第5行打印出来
cat -n /etc/passwd
| sed -n ‘2,5p’
#将部分数据的查找与替换
格式:sed
‘s/replacestring/newstring/g’

3.awk
awk是一个数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。
awk 'pattern1{action1}pattern2{action2}pattern3{action3}...'
filename
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。
3.1.模式
模式可以是以下任意一个:
(1)正则表达式:使用通配符的扩展集。
(2)关系表达式:关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
(4)模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
(5)模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
(6)BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
(7)END:让用户在最后一条输入记录被读取之后发生的动作。
3.2. 操作

操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。

主要有四部份:

(1)变量或数组赋值
(2)输出命令
(3)内置函数
(4)控制流命令
awk内置变量: 
NF : 每一行($0)拥有的字段总数 
NR :当前awk所处理的是“第几行”数据 
FS : 当前分隔符,默认空格键 
在每一行的每个字段都是有变量名称的,如$1,$2,$3。。
如:
last -n | awk '{ print $1 “\t lines: ” NR “\t columes :”
NF}'

在awk中,后续动作都是由单引号括住的,在print中,非变量的文字部分,必须要使用双引号来定义。

awk -F":" '{ print $1 }' /etc/passwd

上例中,在调用 awk 时,使用 -F 选项来指定 ":" 作为字段分隔符

4.cut
cut是将一段信息切割出来,将同一行的数据进行分解,它一
般输出的是符合条件的字段,并不是一整行的数据,以行为处理单位,输出主要是以字段为单位,也就是输出的仅仅是行的一部分数据,主要用于分析log文件
格式:
cut -d '' -f fileds
cut -c 字符范围
参数:
-d:后面接分隔符,与-f一起使用
-f:根据-d的分隔符将一段消息分为数段,-f表出取出第几段
-c:以字符为单位取出固定的字段范围
example:
#输出分割后的第3和第5段
echo $PATH | cut -d ':' -f 3,5
#将path中第13个字符后的字符串输出

echo
$PATH| cut -c 12-

5.Sort

sort主要是用来进行排序的

格式:sort[-fbMnrtuk]
[file or stdin]

参数:

-f:忽略大小写的差异,例如A与a视为编码相同;

-b:忽略最前面的空格符部分;

-M:以月份的名字来排序,例如JAN,DEC 等等的排序方法;

-n:使用『纯数字』进行排序(预设是以文字型态来排序的);

-r:反向排序;

-u:就是uniq,相同的数据中,仅出现一行代表;

-t:分隔符,预设是tab键;

-k:以那个区间(field)来进行排序的意思,

example:

cat/etc/passwd | sort -t ':' -k 3

6.Uniq

去掉重复的行,也可以理解为分组的作用。

格式:uniq[-ic]

参数:

-i:忽略大小写字符的不同;

-c:进行计数,主要就是统计相同行的数目

example:

catiplog| uniq 相同的每一个只输出一次

catiplog|uniq -c 相同的每一个只输出一次,并且在每行首加上出现的次数

7.WC

WC主要用来对与文件里的字数,行数,字符数进行有效的统计

格式:wc[-lwm]

参数:

-l:仅仅列出行数

-w:仅仅列出多少字

-m:多少个字符

example:

#列出passwd中的字数等

wcpasswd

2749 1439 passwd

输出的参数分别为:行数,字数,字符数,文件名

8split

当文件太大的时候记得来分割一下

格式:

split[-bl] file PREFIX

参数:

-b 以大小分割,b,k,m

-l 以行分割

PREFIX 代表分割后的文件名的前缀

example:

#将文件分成300KB的文件,

split-b 300k /etc/termcap tersplit

最后分割后的文件都是tersplitaa,
tersplitab,tersplitac

#将多个文件合并成一个文件

cattermcap* >>termcapback

>>是累加的数据流重定向模式


本文出自 “在云端的追梦” 博客,请务必保留此出处http://computerdragon.blog.51cto.com/6235984/1112168

Linux管道命令的更多相关文章

  1. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  2. linux管道命令之head与tail

    常常会遇到这样的情况: 1.我训练一个模型需要用到很多图片,这些图片都在一个文件夹下面,但是我想仅仅拷贝个一两张看一下图片的质量怎么样? 2.文件夹下有各种各样的数据,数目非常庞大,我想看一下文件夹下 ...

  3. linux 管道命令 小记

    管道命令(pipe) 使用“|”界定符号 管道命令必须能够接收来自前一个命令的数据成为standard input才能继续处理 1.选取命令:cut, grep.分析数据,取出我们想要的. -cut ...

  4. linux管道命令学习(一)

    继续看鸟哥私房菜,看一直很想弄懂的管道命令(pipe).第一次知道管道这个词还是在学django的时候,模板里的过滤器很像这里的管道.管道就是将输出在标准输出中的信息一次次处理最终打印在标准输出中,所 ...

  5. linux 管道命令 竖线 ‘ | ’

    管道符号,是unix功能强大的一个地方,符号是一条竖线:"|", 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为comm ...

  6. Linux下的管道命令有这些:

    Linux下的管道命令有这些: 选取命令:cat grep 排序命令:sort wc uniq 双向重定向:tee 字符转换命令: tr, col, join, paste, expand 切割命令: ...

  7. LINUX常用命令--重定向、管道篇(四)

    一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...

  8. Linux用管道命令对文件的移动

    我的问题是这样的:我有一个文件夹,里面有大约有1000个文件,然后我想把这样的一部分文件给随机分成两部分,一部分含有100张,另外一部分含有剩下的所有的文件,这个时候如果是在Linux图形界面的话直接 ...

  9. Linux的管道命令

    Linux的管道命令 管道命令(Pipe) 管道命令用"|"来表示,管道命令需要接收前一个命令的输出来进行操作,但不能处理前一个命令的错误. //选取界面:cut,grep cut ...

  10. Linux 入门记录:十六、Linux 多命令协作:管道及重定向

    一.多命令协作 在 Linux 系统当中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或多个很简单的功能.通过将不同功能的命令组合一起使用,可以实现某个复杂功能的. Linux ...

随机推荐

  1. Unable to tunnel through proxy. Proxy returns "HTTP/1.1 503 Service Unavailable"

    背景: 某日,一正常项目迁移到新的服务器 新的服务器,需要使用代理来访问之前能直接访问的接口,加完代理之后,发现无法获取数据了 报错: org.springframework.web.client.R ...

  2. ansible部署jdk source /etc/profile 不起作用?

    问题: ansible调用playbook远程mvn执行打包时发现执行出错,找不到JAVA_HOME.我们的exporter JAVA_HOME=/usr/java/jdk1.8.0写在/etc/pr ...

  3. 前端解决Long类型精度丢失的问题

    问题 数据库数据: 前端得到的数据: 出现了Long类型的数据出现精度丢失问题! 原因 JS中Long最大值:9007199254740992 JAVA中Long最大值:922337203685477 ...

  4. idea运行java项目main方法报build failure错误的解决方法

    当在使用 IntelliJ IDEA 运行 Java 项目的 main 方法时遇到 "Build Failure" 错误,这通常意味着在项目的构建过程中遇到了问题.解决这类问题通常 ...

  5. ScanFormer:逐层抵达目标,基于特征金字塔的指代表达理解框架 | CVPR'24

    指代表达理解(REC)旨在在图像中定位由自由形式自然语言描述指定的目标对象.尽管最先进的方法取得了令人印象深刻的性能,但它们对图像进行了密集感知,包含与语言查询无关的多余视觉区域,导致额外的计算开销. ...

  6. SXYZ-6.28训练赛

    今天上午出中考成绩,所以下午打了一场训练赛,只有两个小时,没有昨天毒瘤,但也很毒瘤(还是模拟赛好) 关于中考可以看我的中考游记 (为了保护隐私,以后都把姓名涂掉) 为什么还是倒数啊~ T1 binar ...

  7. 【赵渝强老师】大数据工作流引擎Oozie

    一.什么是工作流? 工作流(WorkFlow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算.工作流要解决的主要问题是:为实现某 ...

  8. 运维管理平台OEM定制集成开发,激发IT价值

    对硬件设备商而言,借助优秀的网管.运维管理平台,可以形成完整的产品解决方案,直接提升产品的形象和适用范围.同时还可以通过网管.运维管理平台,切入到外围的产品及集成领域,并在用户后续的升级改造活动中占据 ...

  9. android IO Prefetch源码分析

    I/O Prefetcher是高通本身提供的一套优化方案,可以用在Android手机App冷启动的时候.本文基于android Q 主要分libqti-iopd.vendor.qti.hardware ...

  10. SCHED_RR和SCHED_FIFO的区别

    SCHED_RR和SCHED_FIFO是Linux内核中用来调度进程的两种调度策略,它们有以下几点区别: 调度方式:SCHED_RR采用轮转调度方式,而SCHED_FIFO则采用先进先出调度方式. 优 ...