Linux之文本处理命令
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之文本处理命令的更多相关文章
- Linux 的文本处理命令一览
grep 基于关键字搜索文本内容 -i 搜索时忽略大小写-n 显示结果所在行数-v 输出不带关键字的行-Ax 在输出的时候包含结果所在行之后的指定行数(x为一个数值,表示输出后面x行)-Bx 在输出的 ...
- Linux 高级文本处理命令
1.2.1 cut命令 cut命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields ## 用于有特定分隔字符 [ ...
- Linux高级文本处理命令
cut 一.cut命令 功能:cut命令可以从一个文本文件/文本流中提取文本列 语法: cut -d '分割字符' -f fields ##用于有特定分割字符 cut -c 字符区间 ##用于排列整齐 ...
- linux——高级文本处理命令之wc、cut、sort
1. wc :Word Count 命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出 1.1 命令格式: wc [选项]文件... 1.2 命令参数: -c 统计字节数. -l ...
- Linux常用文本处理命令
1.grep命令 echo 'zero\nzo\nzoo' | grep 'z.*o':将匹配以'z'开头以'o'结尾的所有字符串 echo 'zero\nzo\nzoo' | grep 'z.o': ...
- linux常用文本编缉命令(strings/sed/awk/cut)
一.strings strings--读出文件中的所有字符串 二.sed--文本编缉 类型 命令 命令说明 字符串替换 sed -i 's/str_reg/str_rep/' filename 将文件 ...
- 编程小技巧之 Linux 文本处理命令
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...
- awk、grep、sed是linux操作文本的三大利器,也是必须掌握的linux命令之一
awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...
- linux文本处理命令
linux文本处理命令 1.wc命令 基本介绍 文件的行统计.字符统计.字节统计 基本语法 wc [OPTION]... [FILE]... wc [OPTION]... --files0-f ...
随机推荐
- ffmpeg: error while loading shared libraries: libavdevice.so.52
今天在编译安装ffmpeg的时候出现了题目中的问题,最终解决方案如下: errors: ffmpeg正常安装后执行ffmpeg时出现如下错误:ffmpeg: error while loading s ...
- Linux-Nginx和NFS
1 虚拟化 查看系统信息 cat /proc/meninfo cat /proc/cpuinfo 其中 flags里面的信息可以查看该cpu是否支持虚拟化 flags上有vmx svm等表示可以虚拟化 ...
- python 基础之第九天
###############错误和异常######################## 说明:e 是错误的具体原因,else 表示没有异常才会执行else的语句,finally 是无乱有没异常都要执 ...
- poj3613Cow Relays——k边最短路(矩阵快速幂)
题目:http://poj.org/problem?id=3613 题意就是求从起点到终点的一条恰好经过k条边的最短路: floyd+矩阵快速幂,矩阵中的第i行第j列表示从i到j的最短路,矩阵本身代表 ...
- HDMI 8193 配置
1, User space:ProjectConfig.mkMTK_HDMI_SUPPORT = yes MTK_MULTIBRIDGE_SUPPORT = yesMTK_INTERNAL_HDMI_ ...
- TortoiseGit创建本地库并提交到远程服务器
前半部分参考网上的例子:http://www.showerlee.com/archives/1300,但会出现“Git did not exit cleanly (exit code 128)”错误 ...
- shell脚本 列出所有网卡的ip地址
#!/bin/bashfor i in `ifconfig | grep -o ^[a-z0-9]*`do ifconfig $i|sed -n 2p|awk '{ print $2 }'|tr -d ...
- 确认框的使用。弹出一个确认框,Ajax提交一个请求,刷新页面。
视图: <td> @if (item.ReviewProject.DeclareState == DeclareOrReviewState.正在进行 && !item.Is ...
- TypeScript完全解读(26课时)_7.ES6精讲 - 类Class基础
ES6精讲 - 类Class基础 es5中创建构造函数和实例 原来在es5中的写法 定义好Point后,在原型对象上定义getPostion的方法 实例自身是没有这个方法的,我们调用的时候会去创建他的 ...
- sed的基础用法简介
sed 最近学习了一些sed的相关知识,初步接触sed以后给我的感受主要有两点.首先是sed强大的功能,学了以后发现之前写的脚本利用sed以后会简化很多啊,具体的有些利用sed编辑shell脚本的思路 ...