Sort

将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

-u     在输出行中去除重复行

-r      改为降序(默认升序)

-o     将排序结果输出到原文件中(sort –r file.txt –o file.txt)

-n     以数值来排序(默认是以字符来排序,比如10比2小)

-t和-k      其中-t后面跟设定的间隔符,若为空格则用单引号将空格括起来,-k来指定列数(以哪一列来排序)

-f      将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c     检查文件是否排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C     检查文件是否排好序,如果乱序,不输出内容,仅返回1

-M    以月份来排序

-b     忽略每一行前面的所有空白部分,从第一个可见字符开始比较

-I      表示忽略不可打印字符,只针对可打印字符(\a,\b,\n,\r都是不可打印字符)

-k:

可以写多个    -k 数字,在前面的优先级高,前面相同的就按后面的排序

-k 3r          表示第三个域按降序排序

-k 3nr       表示第三个域按降序以数值排序

如果将-n写在最前面,那么后面的域里面不用写n,都是按照以数值排序

-k 1.2        表示对第一个域的第二个字符开始到这个域的最后一个字符为止的字符串进行排序

-k 1.2,1.2          表示只针对第一个域的第二个字符排序

-k 3,3        表示只对本域排序,若没有后面那个3,则变成对第3个域开始到最后一个域位置的内容进行排

-k 1.1,1.1 –u    从第一个域的第一个字符开始,遇到相同的删掉本身后面一个字符靠后的

-k 2 –k 1 –k 3 –u      只要有一个有不同就不会轻易删除,-u会权衡所有-k选项,除非全部相同

Sort认为0小于00小于000小于0000…

-k 2.2,3.1          sort只会比较第二个域的第二个字符到第二个域的最后一个字符的部分,不会把第三个域的开头字符纳入比较范围

Cut

三种定位:-b         字节

-c          字符

-f           域

-b

Who|cut –b 3          提取第3个字节

Who|cut –b 3-5,8   提取第3个,第4个,第5个,第8个字节

其中cut –b 3-5,8与cut –b 8,3-5不同,所有定位会从小到大排序

-b -3表示从第一个字节到第三个字节,而-b 3-表示从第三个字节到行尾,且都包括了第3个字节

-b -3,3-表示输出整行,不会出现连续两个重叠的第3个字节

-c

以字符为单位,可以输出中文

-n用于告诉cut不要将多字节字符拆开    -nb 1,2,3便可以输出一个汉字

-f

cut –d : -f 1      以:为间隔符,提取第1个域

-f 3-5        提取第3个,第4个,第5个域

-f 4-          提取第4个域到最后一个域

Cut的-d选项的默认间隔符就是制表符,省略-d选项代表使用制表符,直接用-f来取域

-d ‘ ‘          以空格为间隔符,两个引号之间有空格

paste

将不同文件的数据放在一行

格式:

Paste  <-d><-s>  file1  file2

-d     制定不同于空格或tab键的域分隔符。比如使用@分隔符,就可以-d@。d” ”

-s      将每个文件合并成行,而不是按行合并(每个文件中的内容占一行)

-       使用标准输入

cat a.txt

a

b

c

cat 1.txt

1

2

3

paste a.txt 1.txt

a1

b2

c3

paste –d @ a.txt 1.txt

a@1

b@2

c@3

paste –s a.txt 1.txt

abc

123

#ls

1.txt 2.txt

#ls | paste(默认是一个-,从标准输入读取一个作为一行)

1.txt

2.txt

#ls | paste –

1.txt

2.txt

#ls | paste - -(两个-之间用空格分开,有多少个-,就取多少个作为一行)

1.txt2.txt

Tr

格式:

tr –c –d –s [“string1_to_translate_from”][“string2_to_translate_to”] < input-file

-c     用字符串1中字符集的补集替换此字符集,要求字符集为ASCII

-d     删除字符串1中所有输入字符

-s      删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串

input-file  是转换文件名

指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表

[a-z]a-z内的字符组成的字符串

[A-Z]A-Z内的字符组成的字符串

[0-9]数字串

\octal       一个三位的八进制数,对应有效的ASCII字符

[O*n]       表示字符O重复出现指定次数n。因此是匹配OO的字符串

\a Ctrl-G 铃声\007

\b Ctrl-H  退格符\010

\f Ctrl-L    走行换页\014

\n Ctrl-J   新行\012

\r Ctrl-M  回车\015

\t Ctrl-I    tab键\011

\v Ctrl-X\ 030

应用例子

tr –s “[a-z]” <oops.txt > result.txt

去除oops.txt里面的重复的小写字符

tr –s “[\012]” < plan.txt 或 tr –s [“\n”] < plan.txt

删除空行

tr –s “[\015]” “[\n]” < file 或 tr –s “[\r]” “[\n]” < file

删除文件中的^M,并代之以换行

cat a.txt |tr “[a-z]” “[A-Z]” > b.txt

大写到小写

tr –cs “[a-z][A-Z]” “[\012*]” <diary.txt

将文件每行所有不包含在[a-z]或[A-Z]的字符串放在字符串1中并转换为一新行。-s表示压缩所有新行,-c表示保留所有字母不动

转换控制字符

#cat –v stat.txt                  显示stat.txt的控制字符

box aa^^^^^12^M

apple bbas^^^^23^M

^Z

猜想‘^^^^^’是tab键,每一行以Ctrl-M结尾,文件结尾Ctrl-Z

使用-s选项,查看ASCII表。^的八进制代码是136,^M是015,tab键是011,^Z是032

用tab键替换^^^^^,命令为”\136” “[\011*]”。将结果重定向到临时工作文件stat.tmp

tr –s “[\136]” “[\011*]” <stat.txt >stat.tmp

用新行替换每行末尾的^M,并用\n去除^Z,输入要来自于临时工作文件stat.tmp

tr –s “[\015][\032]” “\n” <stat.tmp

要删除所有的tab键,代之以空格,使用命令

tr –s “[\011]” “[\040*]” <input.file

tr –s “[:]” “[\011]” </etc/passwd或tr –s “[:]” “[\t]” </etc/passwd

替换passwd文件中所有冒号,代之以tab键,可以增加可读性

echo $PATH | tr “:” “\n”

将冒号改为回车

可以在vi里面使用所有的命令,记住:在tr命令前要加上希望处理的行范围和感叹号(!),如1,$!tr –d ‘\t’(美元符号表示最后一行)

Tee

功能说明:读取标准输入的数据,并将其内容输出成文件

语法:tee [-ai] [--help] [--version] [文件…]

补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。可利用tee把管道导入的数据存成文件,甚至一次保存数份文件

参数:

-a     附加到既有文件的后面,而非覆盖它

-i      忽略中断信号

--help       在线帮助

--version  显示版本信息

范例:

#cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3

列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1 ss-copy2 ss-copy3

tee file     //覆盖

tee –a file         //追加

tee -        //输出到标准输出两次

tee - -       //输出到标准输出三次

tee file1 file2 -        //输出到标准输出两次,并写到那两个文件中

#tee testfile

生成一个文件,包含你敲入的内容

#tee –i testfile

结果同testfile,不过不会接收中断信号,只能用Ctrl+d结束,不能用Ctrl+c

#ls | tee test

执行ls列出目录文件同时将输出保存到文件test中

#ls “adfxaffewfasdf” 2>&1 | tee ls.txt

把标准错误输出也保存到文件

Uniq

可以去除排序过的文件中的重复行,因此uniq经常和sort何用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的,若有重复行却没在相邻,那么uniq不会删除的

选项:

-c     可在每个输出行之前加上该行重复的次数

-d     仅显示重复的行

-u     显示没有重复的行

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

#cat testfile

hello

world

friend

hello

world

hello

#sort testfile | uniq –c

1 friend

3 hello

2 world

#sort testfile | uniq –dc

3 hello

2 world

#sort testfile | uniq –u

friend

Linux之文本处理命令的更多相关文章

  1. Linux 的文本处理命令一览

    grep 基于关键字搜索文本内容 -i 搜索时忽略大小写-n 显示结果所在行数-v 输出不带关键字的行-Ax 在输出的时候包含结果所在行之后的指定行数(x为一个数值,表示输出后面x行)-Bx 在输出的 ...

  2. Linux 高级文本处理命令

    1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields     ## 用于有特定分隔字符 [ ...

  3. Linux高级文本处理命令

    cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...

  4. linux——高级文本处理命令之wc、cut、sort

    1.  wc :Word Count 命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出 1.1 命令格式: wc [选项]文件... 1.2 命令参数: -c 统计字节数. -l  ...

  5. Linux常用文本处理命令

    1.grep命令 echo 'zero\nzo\nzoo' | grep 'z.*o':将匹配以'z'开头以'o'结尾的所有字符串 echo 'zero\nzo\nzoo' | grep 'z.o': ...

  6. linux常用文本编缉命令(strings/sed/awk/cut)

    一.strings strings--读出文件中的所有字符串 二.sed--文本编缉 类型 命令 命令说明 字符串替换 sed -i 's/str_reg/str_rep/' filename 将文件 ...

  7. 编程小技巧之 Linux 文本处理命令

    合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...

  8. awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一

    awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...

  9. linux文本处理命令

    linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc  [OPTION]...  [FILE]... wc  [OPTION]...  --files0-f ...

随机推荐

  1. ansible 文件模块,很实用

    摘自: http://blog.csdn.net/kellyseeme/article/details/50545521

  2. BestCoder8 1002 Revenge of Nim(hdu 4994) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4994 题目意思:有 n 个 heap(假设从左至右编号为1-n),每个 heap 上有一些 objec ...

  3. Opencv— — mix channels

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  4. python 基础之第十二天(re正则,socket模块)

    In [14]: 'hello-wold.tar.gz'.split('.') Out[14]: ['hello-wold', 'tar', 'gz'] In [15]: import re In [ ...

  5. [HAOI 2010] 计数

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2425 [算法] 类似与数位动态规划的思想 , 用组合数学进行简单推导即可 时间复杂度 ...

  6. myeclipse_JUnit导包问题

    第一种方式: MyEclipse创建JUnit单元测试时,在需要测试的代码段前键入“@Test”时,按ctrl和1一般会自动提示JUnit需要导包,但有时会无法提示这个建议,如图所示.该经验教你如何解 ...

  7. OpenCV在Zedboard上的移植

    OpenCV编译 本文的前提是zynq交叉编译环境设置 下载opencv3.1.0源码,并解压 wget https://github.com/Itseez/opencv/archive/3.1.0. ...

  8. powerdesigner设置主键为自增字段,设置非主键为唯一键并作为表的外键

    转自:https://www.cnblogs.com/CoffeeHome/archive/2014/06/04/3767501.html 这里powerdesigner连接的数据库是以mysql为例 ...

  9. java读取文件:二进制文件

    FileWriter只能接受字符串形式的参数,也就是说只能把内容存到文本文件.相对于文本文件,采用二进制格式的文件存储更省空间 InputStream用于按字节从输入流读取数据.其中的int read ...

  10. 技术胖Flutter第三季-18布局CardWidget 卡片布局组件

    技术胖Flutter第三季-18布局CardWidget 卡片布局组件 博客地址: https://jspang.com/post/flutter3.html#toc-420 最外面是Card布局,里 ...