对文件数据操作命令

对文件数据操作命令

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

文件查看命令: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