Linux系统上的文件处理工具

Linux系统上的文件处理工具

我们都知道在计算机中,存在大量的文件,这些文件中包含大量的信息。可是有些时候,为了工作的效率,我们在茫茫信息中提取出我们所需要的信息,这样的技能就显得尤为重要。Linux系统上为我我们提供了多种多样的文本处理工具,下面我们来简单说一下。

查看文件内容我们可以使用less命令,cat命令,more命令等等

cat

cat [OPTION]… [FILE]…

-E: 显示行结束符$

-n: 对显示出的每一行进行编号

-A:显示所有控制符

-b:非空行编号

-s:压缩连续的空行成一行

cat命令是把整个目标文件的内容整个打印出来,如果我们遇到文件非常庞大的情况,我们可以使用less和more来进行查看

less:一页一页地查看文件或STDIN输出

查看时有用的命令包括:

/keyword 关键字查询

n/N跳到下一个or 上一个匹配

less命令其实就是man命令使用的分页器

more:分页查看文件

more [OPTIONS…] FILE…

-d: 显示翻页及退出提示

如果我们想要显示文本前或后n行内容

head

head [OPTION]… [FILE]…

-c #: 指定获取前#字节

-n #: 指定获取前#行

-#:指定行数

tail

tail

tail [OPTION]… [FILE]…

-c #: 指定获取后#字节

-n #: 指定获取后#行

-#:

-f: 跟踪显示文件新追加的内容,常用日志监控

如果我们想要在使用-f选项的同时,进行其他工作,可以在最后加上&符号,将其调到后台运行。

按列抽取文本

cut

cut [OPTION]… [FILE]…

-d DELIMITER: 指明分隔符,默认tab

-f FILEDS:

#: 第#个字段

#,#[,#]:离散的多个字段,例如1,3,6

#-#:连续的多个字段, 例如1-6

混合使用:1-3,7

-c 按字符切割

–output-delimiter=STRING指定输出分隔符

显示文件或STDIN数据的指定列

cut -d:-f1 /etc/passwd

cat /etc/passwd | cut-d:-f7

cut -c2-5 /usr/share/dict/words

paste 合并两个文件同行号的列到一行

paste [OPTION]… [FILE]…

-d 分隔符:指定分隔符,默认用TAB

-s : 所有行合成一行显示

paste f1 f2 

paste -s f1 f2

有时候我们需要对文本进行分析

wc:收集文本统计数据

计数单词总数、行总数、字节总数和字符总数

可以对文件或STDIN中的数据运行

例如:$wcstory.txt

39 237 1901 story.txt

行数 字数 字符数

使用 -l 来只计数行数

使用 -w 来只计数单词总数

使用 -c 来只计数字节总数

使用 -m 来只计数字符总数

sort:文本排序

把整理过的文本显示在STDOUT,不改变原始文件

$sort [options] file(s)

-r 执行反方向(由上至下)整理

-n 执行按数字大小整理

-f 选项忽略(fold)字符串中的字符大小写

-u 选项(独特,unique)删除输出中的重复行

-t c 选项使用c做为字段界定符

-k X 选项按照使用c字符分隔的X列来整理能够使用多次

uniq:从输入中删除重复的前后相接的行

uniq[OPTION]… [FILE]…

-c: 显示每行重复出现的次数;

-d: 仅显示重复过的行;

-u: 仅显示不曾重复的行;

连续且完全相同方为重复

常和sort 命令一起配合使用:

sort userlist.txt | uniq-c

linux上文本处理三剑客:

grep,egrep,fgrep:文本过滤工具(模式:pattern)工具;

grep:基本正则表达式,-E,-F

egrep:扩展正则表达式,-G,-F

fgrep:不支持正则表达式

sed:stream editor,流编辑器;文本编辑器工具;

awk:linux上的实现为gawk,文本报告生成器(格式化文本);

grep:Global search REgularexpression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式”对目标文件进行逐行匹配检查;打印匹配到的行。

模式:由正则表达式字符及文本字符所编写的过滤条件

正则表达式REFEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能。

正则表达式分为两类:

基本正则表达式:BRE

扩展正则表达式: ERE

grep:

grep [OPTIONS] PATTERN [FILE…]

OPTIONS:

    –color=auto:对匹配到的文本着色后高亮显示;

    -i:ignorecase,忽略字符的大小写;

    -o:仅显示匹配到的字符串本身;

    -v, –invert-match:显示不能被模式匹配到的行;

    -E:支持使用扩展的正则表达式元字符;

    -q, –quiet, –silent:静默模式,既不输出任何信息;

    -A#:after,后#行

    -B#:before,前#行

    -C#:context,前后各#行

说到这里我们就非常有必要说一下正则表达式

正则表达式:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

基本正则表达式元字符:

字符匹配

  .:匹配任意单个字符

  []:匹配指定范围内的任意单个字符;

    [^]:匹配指定范围外的任意单个字符;

    [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]

    匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式

    *:匹配其前面的字符任意次:0.1.多次;

    .*:匹配任意长度的任意字符

    /?:匹配其前面的字符0次或1次;既其前面的字符是可有可无的;

    \+:匹配其前面的字符1次或多次;既其前面的字符要出现至少1次;

    \{m\}:匹配其前面的字符m次;

    \{0,n}:至多n次

    \{m,}:至少m次

    位置锚定:

    ^:行首锚定;用于模式的最左侧;

    $:行尾锚定;用于模式的最右侧;

    ^PATTERN$:用于PATTERN来匹配整行;

    ^$:空白行

    ^[[:space:]]*$:空行或包含空白字符的行;

    单词:非特殊字符组成的连续字符(字符串)都称为单词;

    \<或\b:词首锚定,用于单词模式的左侧;

    \>或\b:词尾锚定,用于单词模式的右侧;

    \<PATTERN>:匹配完整单词;

    分组及引用

    \(\):将一个或多个字符捆绑在一起,当做一个整体进行处理;

    Note:分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

    \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

    \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;

    \3:

    …

    实例:\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

扩展正则表达式:

egrep= grep -E

egrep [OPTIONS] PATTERN [FILE…]

扩展正则表达式的元字符:

字符匹配:

. 任意单个字符

[] 指定范围的字符

[^] 不在指定范围的字符

次数匹配:

*:匹配前面字符任意次

?: 0或1次

+:1次或多次

{m}:匹配m次

{m,n}:至少m,至多n次    

位置锚定:

^ :行首

$ :行尾

\<, \b :语首

\>, \b :语尾

分组:

()

后向引用:\1, \2, …

例:

a|b

C|cat: C或cat

(C|c)at:Cat或cat

原创文章,作者:song_linux,如若转载,请注明出处:http://www.178linux.com/29466

(0)
song_linuxsong_linux
上一篇 2016-08-05
下一篇 2016-08-05

相关推荐

  • 8月4号作业

    正则表达式表示18位身份证号 egrep "\b[0-9]{17}(x|X|[0-9])\b" 正则表达式表示手机号 egrep "\b1[3,5,8,7][0-9]{9}\b" phone 正则表达式表示邮箱 grep -E "\b[[:alnum:]].*@[[:alnum:]]{2,3}.[[:alnu…

    Linux干货 2016-08-08
  • 马哥教育网络班21期+第15周课程练习

    1、总结sed和awk的详细用法; sed的详细用法 awk的详细用法 2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符; # sed 's/^[[:space:]]*//' /boot/grub/grub.conf 3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白…

    Linux干货 2016-11-14
  • linux网络管理(基础-IP、MAC、TCP)

    linux网络管理 计算机网络 MACMAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制、介质访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于…

    Linux干货 2016-09-09
  • 计算机和linux基础

    计算机的组成及其功能 计算机硬件主要由5部分组成:运算器 、控制器、存储器、input、output。 但是这和我们平时见到的计算机不一样?我们平时见到的计算机有CPU,内存,硬盘,显示器,鼠标键盘,显卡、主板等。这些东西也都归在以上五类设备中。下面我们简单介绍一下计算机这五个组成部分。 运算器: 运算器是计算机中做运算的部分,可以执行各种指令,加减乘除,与…

    Linux干货 2016-09-16
  • 逻辑卷管理

    1.相关命令:lsblk、fdisk、gdisk、parted、mkfs、mke2fs、blkid、e2label、findfs、tune2fs、dumpe2fs、fsck、e2fsck、mount、swapon、swapoff、mkisofs、wodim、free、df、du、dd。 2.列出块设备:lsblk    &nbs…

    Linux干货 2016-09-01
  • N26-博客作业-week11

    1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1、先用单向加密算法计算出数据的特征码 2、私钥加密特征码,并将结果附加在数据之后 3、生成一个临时的对称密钥,并使用对称密钥加密整段数据 4、获取对方的公钥,使用该公钥加密之前生成的临时对称密钥,并附加在数据之后 5、将所有数据发送给对方解密过程 1、先使用私钥解密加密的对称密钥 2、用对称密钥解密…

    2017-04-18