对文件数据操作命令

对文件数据操作命令

  很多时候,我们都会去计算一次数据里头的的相同类型的数据总数或者查看特性的一些信息,在这个时候我们就需要排序与计算之类的命令来辅助,下面就是几个好用的操作文件数据命令。

文件查看命令:cat, tac

1.png

cat [OPTION]… [FILE]…

    对文件数据操作命令-E: 显示行结束符$

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

    -A:显示所有控制符

    -b:非空行编号

    -s:压缩连续的空行成一行 文件查看 5 分页查看文件内容

more: 分页查看文件

    more [OPTIONS…] FILE…

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

tac命令跟cat差不多,就是把cat命令的输出结果反过来。

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

显示文件头/尾几行

head [OPTION]… [FILE]…

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

    -n #: 指定获取前#行

    -#: 指定行数

如:

2.png

对文件数据操作命令

tail [OPTION]… [FILE]…

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

    -n #: 指定获取后#行

    -#:

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

切出文本内容与合并文本

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

在这里如果我们想获得/etc/passwd文件中第一行的用户名所属组shell类型的时候就可以跟前面所学的结合起来

对文件数据操作命令3.png

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

paste [OPTION]… [FILE]…

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

    -s : 所有行合成一行显示 paste f1 f2 paste

    -s f1 f2

收集文本统计数据wc

   如果你想知道一个文件里面有多少字,多少行,多少字符的话,那么就可以使用这个命令来完成。

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

对文件数据操作命令4.png

    使用 -l 来只计数行数

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

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

    使用 -m 来只计数字符总数 11 文本排序sort

排序sort

这个命令可以帮我们排序,而且可以根据不同的数据类型排序。

把整理过的文本显示在STDOUT,不改变原始文件 $ sort [options] file(s)

对文件数据操作命令5.png

常用选项 :

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

    -n 执行按数字大小整理

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

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

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

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

uniq命令

这个命令可以将重复的行删除只保留一个,由于这个命令是将重复的东西减少,所以要配合排序过的文件进行处理

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

uniq [OPTION]… [FILE]…

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

    -d: 仅显示重复过的行

    -u: 仅显示不曾重复的行 连续且完全相同方为重复

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

    sort userlist.txt | uniq -c

比较文件

比较两个文件之间的区别

  diff 命令的输出被保存在一种叫做“补丁”的文件中

使用 -u 选项来输出“统一的(unified)”diff格式文 件,最适用于补丁文件。

  patch 命令复制在其它文件中进行的改变

适用 -b 选项来自动备份改变了的文件

如:

  $ diff -u foo.conf-broken foo.conf-works > foo.patch

  $ patch -b foo.conf-broken foo.patch

Linux上文本处理三剑客

1、grep:文本过滤(模式:pattern)工具; grep, egrep, fgrep(不支持正则表达式搜索)

2、sed:stream editor,文本编辑工具;

3、awk:Linux上的实现gawk,文本报告生成器;

grep

    grep: Global search REgular expression and Print out the line. 作用:文本搜索工具,根据用户指定的“模式”对目标文 本逐行进行匹配检查;打印匹配到的行; 模式:由正则表达式字符及文本字符所编写的过滤条件

对文件数据操作命令6.png

grep [OPTIONS] PATTERN [FILE…]

grep命令选项

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

    -v: 显示不能够被pattern匹配到的行;

    -i: 忽略字符大小写

    -n:显示匹配的行号

    -c: 统计匹配的行数

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

    -q: 静默模式,不输出任何信息

    -A #: after, 后#行

    -B #: before, 前#行

    -C #:context, 前后各#行

    -e:实现多个选项间的逻辑or关系 grep –e ‘cat ’ -e ‘dog’ file

    – w:整行匹配整个单词

    – E:使用ERE 19 正则表达式

正则表达式

  正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。

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

程序支持:grep, vim, less,nginx等

分两类: 基本正则表达式:BRE 扩展正则表达式:ERE grep -E, egrep

正则表达式引擎: 采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions)

元字符分类:字符匹配、匹配次数、位置锚定、分组

man 7 regex 20 基本正则表达式元字符

字符匹配:

    . : 匹配任意单个字符;

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

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

    匹配次数:用在要指定次数的字符后面,用于指定前面的字 符要出现的次数

    *:匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 .*:任意长度的任意字符

    \?:匹配其前面的字符0或1次

    \+:匹配其前面的字符至少1次

    \{n\}:匹配前面的字符n次

    \{m,n\}:匹配前面的字符至少m次,至多n次

    \{,n\}:匹配前面的字符至多n次

    \{n,\}:匹配前面的字符至少n次

    位置锚定:定位出现的位置

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

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

    ^PATTERN$: 用于模式匹配整行

    ^$: 空行

    ^[[:space:]]*$ :空白行

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

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

    \<PATTERN>:匹配整个单词

分组:

    \(\):将一个或多个字符捆绑在一起,当作一个整体进 行处理,如:\(root\)\+

    分组括号中的模式匹配到的内容会被正则表达式引擎记录 于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

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

    实例:

    \(string1\+\(string2\)*\)

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

    \2: string2

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

正则表达式元字符的定义

    ^ 行首

    $ 行尾

    . 任意单一字符

    [] []内任意单一字符

    [^] 除[]内任意单一字符

    * *前面字符重复不确定次数

    \+ \+前面字符重复一次以上不确定次数

    \? ?前面字符重复0或1次 \ 转义符

    .* 任意长度字符

    \{n\} 前面字符重复n次

    \{n,\} 前面字符重复n次以上

    \{m,n\} 前面字符重复m次和n次之间

    [:alpha:] 所有字母,包括大、小写

    [:alnum:] 所有字母和数字

    [:upper:] 所有大写字母

    [:lower:] 所有小写字母

    [:digit:] 所有数字

    [:punct:] 所有标点符号

    [:space:] 空格和Tab

egrep及扩展的正则表达式

egrep = grep -E

egrep [OPTIONS] PATTERN [FILE…]

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

字符匹配:

     . 任意单个字符

    [] 指定范围的字符

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

次数匹配:

    *:匹配前面字符任意次

    ?: 0或1次

    +:1次或多次

    {m}:匹配m次

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

位置锚定:

    ^ :行首

    $ :行尾

    \<, \b :语首

    \>, \b :语尾

分组:

    ()

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

    或者:

    a|b:a或者b

    C|cat: C 或cat

    (C|c )at:Cat 或cat

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

(0)
502795641502795641
上一篇 2016-08-08
下一篇 2016-08-08

相关推荐

  • Select、Case

    select循环与菜单 select循环主要用于创建菜单,按数字排序list指定的顺序排序,并列出在标准输出,利用PS3列出提示符进行输入选择 用法: select VARIABLE in list  do     循环体命令 done PS3提示语定义: 在脚本中脚本代码的第一…

    Linux干货 2016-08-21
  • 五大主流数据库模型

    导读:无论是关系型数据库还是非关系型数据库,都是某种数据模型的实现。本文将为大家简要介绍5种常见的数据模型,让我们来追本溯源,窥探现在流行的数据库解决方案背后的神秘世界。 什么是数据模型? 访问数据库中的数据取决于数据库实现的数据模型。数据模型会影响客户端通过API对数据的操作。不同的数据模型可能会提供或多或少的功能。一般而言,数据模型不会直接提供过多的功能…

    Linux干货 2015-04-04
  • python装饰器详解

    python之装饰器详解 一、装饰器定义 定义一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身。 二、装饰器四部曲(分解) 1、函数可赋值给变量。若赋值给变量的是调用后的函数,变量的值就是return的返回值。 切记:函数赋值给变量,只看return的值。分清楚函数是处于调用状态还是未被调用状态。若函数没有写return,默认ret…

    2017-02-08
  • AWK学习总结

    AWK是一种优良的文本处理工具。其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。 AWK学习总结 函数rand(): 函数length() 函数int()…

    Linux干货 2016-12-03
  • linux正则表达式和vim的详细解析!

    正则表达式: 元字符– [:upper:] 大写 [:lower:] 小写 [:digit:] 全数字 [:alpha:] 全字母 [:alnum:] 全字母数字 匹配次数– . 匹配任意单个字符 * 匹配前面字符任意次 \? 匹配前面字符0次或1次 \{n\} 匹配至少n次 \{m,m\} 匹配至少m次 最多n次 \{,n\} 匹配…

    Linux干货 2017-04-09
  • 第八周-Shell脚本编程

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态; 在线的主机使用绿色显示; 不在线的主使用红色显示; #!/bin/bash for i in {1..254}; do { ip=172.16.250.$i if ping -c 1 -w 1 $ip &> /dev/null …

    Linux干货 2017-08-23