第7课重点命令4-tr&join&cut&paste&split

来源:互联网 发布:怎样看淘宝等级 编辑:程序博客网 时间:2024/05/01 04:46

http://bbs.watchstor.com/thread-70380-1-1.html

目录
命令:tr 1
命令:join 3
命令:cut 4
命令:paste 4
命令:split    5
命令:tr
tr

用来从标准输入中通过替换/删除进行字符转换【不接受指定的文件参数,而只是对标准输入进行翻译】
主要用于删除文件中的控制字符或进行字符转换

使用时,提供两个字符串,串1:用于查询,串2:用于处理各种转换;
串1的字符被映射到串2上,然后转换开始


主要用途:

1.大小写转换
2.去除控制字符
3.删除字符


格式:

tr –c –d –s
[“str_from”] [“str_to”] file
tr –选项
源 目标
输入文件   【即读取文件,将
源->目标】


选项

-c,用字符串1中字符集的补集替换此字符集,要求字符集为ASCII
-d,删除字符串中所有指定字符串 
    tr –d “:”
-s,删除所有str_from重复出现字符序列,只保留一个,即重复字符串压缩为一个
【一个很经典的应用就是把不规律的空格缩减为一个空格】

字符范围——tr,可以指定字符串列表或范围作为形成字符串的模式,似正则,但不是正则。
[a-z] [A-Z] [0-9]   
/octal一个三位八进制数,对应有效ASCII字符
[s*n]字符s出现n次


tr 中特定字符的不同表达方式

\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中表示集合的符号

[:alnum:]

所有字母字符与数字

[:alpha:]

所有字母字符

[:blank:]

所有水平空格

[:cntrl:]

所有控制字符

[:digit:]

所有数字

[:graph:]

所有可打印的字符(不含空格符)

[:lower:]

所有小写字母

[:print:]

所有可打印的字符(包含空格符)

[:punct:]

所有标点字符

[:space:]

所有水平与垂直空格符

[:upper:]

所有大写字母

[:xdigit:]

所有16
进位制的数字


常用示例:

1.     
去除所有重复字符【只保留一个】
$tr –s “[a-z]”
2.     
去除空行
$tr –s “[\012]”
$tr –s “[\n]”
$tr –s “\n”
3.     
小写转大写
$echo “AbcdefG” | tr “[a-z]” “[A-Z]”
$echo “AbcdefG” | tr “[:lower:]” “[:upper:]”
4.     
删除指定字符串
$tr
–cs “[a-z][A-Z]” “[\012*]”
将非字母字符转为新行
-s压缩重复的字符
5.     
转换控制字符
$tr –s “[\136]” “[\011*]”
6.     
快速转换
$tr –s “[\r]” “[\n]”
7.     
匹配多于一个字符
$tr “[0*4]” “*”
8.
tr SET1 SET2
即SET1中的字符都会被替换为SET2中相应位置上的字符。
tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理呢?

如果SET1>SET2, SET1中多出来的字符都会和SET2中最后一个字符相对应。
如果SET1,SET2中多余的部分将被抛弃\


命令:join
join【这个需要找习题练下】

将来自两个分类文本文件的行连在一起

前提
:file1,file2已分类
每个文件都有一些元素与另一文件相关——连
有点像求并集
注:joio时文本域要少于20=


格式:

join [options] input-file
input-file2


选项:

an n为数字,用于连接时从文件n中显示不匹配行,-a1表示第一个文件的不匹配行
o n,m    n为文件号,m为域号,
1,3 表示只显示文件1的第三域
j n m    n为文件号,m为域
使用其他域做连接域
t 域分隔符
用来设置非空格/非tab分隔符


常用示例:

1.     
连接两个文件[默认连接域为域0]
$Join name.txt. town.txt 
2.     
显示第一个文件的不匹配行
$join –a1 name.txt town.txt
3.     
设置显示连接结果
$join –o 1.1,2.2 name.txt town.txt
第一个文件第一个域和第二个文件第二个域作为显示结果
4.     
设置连接域
$join –j 1 3 –j 2 2 file1 file2


命令:cut
Cut:

用来从标准输入或文本文件中剪切列或域【提取文本列】
cut命令可以从一个文本文件或者文本流中提取文本列
可将剪切到的文本贴到另一个文件中


格式:

cut [options] file1 file2


选项:

-b 字节
-c list  指定剪切字符数
-d 指定与空格/tab不同的分隔符
-c 指定剪切的字符范围,字符,如-c 1,5,7
第1,5,6,7字符 
-c 1-50 前50个字符
-f  指定剪切的域范围
-f 1,5 剪切1,5两个域 
-f 1,10-12 剪切1,10,11,12四个域
【一般组合为
–d ‘分隔符’ –f
域NO】
【另一组合-c】


常用示例:

-使用域分隔符
$cut –d : -f3 data
1.     
剪切指定域
$cut –d : -f1,3 data
2.     
剪切字符
$who –u | cut –c 1-8


命令:paste
paste

该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反,Paste将数据贴到相关文件中
存在两个不同来源
数据应先分类,确保文件行数同

功能说明:合并文件的列
补充说明:paste指令会把每个文件以列对列的方式,一列列地加以合并


格式:

paste [-s][-d 间隔字符>][--help][--version][文件...]


选项:

-d 指定不同分隔符,默认分隔符为tab
-s  或--serial将每个文件合并成行而不是按行黏贴,文件A一行,文件B一行
--help  在线帮助。
--version  显示帮助信息


常用示例

File1
1
2
File2
A
B

1.     
合并之
【默认分隔符是tab】
$paste file1 file2
1       
A
2       
B
2.     
指定分隔符
$paste –d: file2 file1
         A:1
         B:2
3.     
合并两行,而非按行黏贴
$paste –s file1 file2
1 2
A B


命令:split
split

用来将文件切分为小文件
split(按大小分割)和csplit(按匹配分割)


格式:

split –output_file_size input_filename output_filename
其中out_file_size为被分割行数,默认1000

原创粉丝点击