paste
将文件按列合并。
例如:
inputfile1.txt
Code:
12345 67890 24580
inputfile2.txt
Code:
AAAAA BBBBB CCCCC
DESIRED OUTPUT:
outputfile.txt
Code:
12345 AAAAA 67890 BBBBB 24580 CCCCC
paste inputfile1.txt inputfile2.txt > outputfile.txt
1,cat
-A 可以 显示处理不可打印字符
2, sort
按行排序,可以一次接收多个文件。
-b --ignore-leading-blanks sort默认是处理整行,从第一个字符开始,-b可以忽略掉行开头的空白
-f --ignore-case 忽略大小写
-n --numeric-sort 按数字大小排序
-r --reverse 逆序
-k --key=field1[,field2] 按从field1到field2的key排序,而非整行。排序允许指定多个-k选项,一个-k选项也可以指定一个字段范围,如果没有指定范围,-k从指定的字段开始到行尾作为排序关键字。
-m --merge 合并多个文件
-o --output=file 输出到文件
-t --field-separator=char 定义分隔符,默认是空格和tab
-u --unique 删掉重复行
例如:ls -l /usr/bin | sort -nrk 5 | head
指定第五个field作为排序关键字。
例如:
sort --key=1,1 --key=2n distros.txt
等效于
sort -k 1,1 -k 2n distros.txt
注意,1,1 不能写成 1
一个选项字母可能被包含在一个键值说明符的末尾,其用来指定排序的种类。这些 选项字母和 sort 程序的全局选项一样:b(忽略开头的空格),n(数值排序),r(逆向排序),等等。
有时候我们遇到的日期是 MM/DD/YYYY 这种写法,但是我们想按照YYYY-MM-DD的顺序排序,那么可以使用这种办法:
[me@linuxbox ~]$ sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt
Fedora 10 11/25/2008
Ubuntu 8.10 10/30/2008
SUSE 11.0 06/19/2008
-k 3.7 ,意思是:从第3field的第7个字符开始作为sort的关键字排序。
3,uniq
uniq仅删除临近重复的行。
一般跟sort连用,sort -u 可以支持uniq功能。
4, cut
从文本行截取一部分输出到标准输出。
-c list --characters=list 截取list定义的部分,数字范围之间用逗号分隔,范围内的数字用减号分隔,例如:cut -c 7-10
-f list --fields=list 截取list定义的fields,list可以包含一个或多个fields,或者用逗号分隔的field范围。例如:cut -f 3
-d delim --delimeter=delim 配合-f指定field分隔符,默认是单个tab键。
5,paste
拼接列。
6, join
将多个文件的列基于相同的field进行合并。
ps,相同的field顺序要一致,只合并field值相同的行,拿空白符作为输入间隔,拿空格作为输出间隔。
7,tr
transliterate characters,字符转换。接受标准输入,结果呈现在标准输出。
[me@linuxbox ~]$ echo "lowercase letters" | tr a-z A-Z
LOWERCASE LETTERS
字符集可以是以下3种写法:
1,枚举型,例如:ABCDEFGHIJKLMNOPQRSTUVWXYZ
2,字符范围。例如:A-Z
3,POSIX字符集,例如:[:upper:]。
-s squeeze, 删除相邻的重复字符。例如:
echo "aaabbbccc" | tr -s ab
[me@linuxbox ~]$ echo "abcabcabc" | tr -s ab
abcabcabc
8,sed
stream editor.
echo "front" | sed 's/front/back/' 斜线/是分隔符,分隔符可以任选,斜线是常用的,事实上,紧跟着命令后面的任何字符都会被认为是分隔符,比如:echo "front" | sed 's_front_back_'。
地址符:
n 行号
$ 最后一行
/regexp/ 匹配POSIX基础正则表达式的行,
addr1,addr2 从addr1到addr2的行
first~step 匹配数字first行,然后每间隔step行。例如:1~2 所以的奇数行,5~5第五行和其后的每个第五行。
addr1,+n addr1和其后的n行
addr! 除了addr之外的所有行。addr可以是以上任一种地址符
基本的编辑命令:
= 输出当前行号
a 当前行后面append文本
d Delete 当前行
i 在当前行前面insert文本
p 打印当前行。默认sed打印所有行,编辑匹配行。默认行为可以用-n选项覆盖。
Q Exit sed
s/regexp/replacement/ 替换。在replacement中,&表示regexp匹配到的文本,\1到\9是反向引用,表示regexp中相应的子表达式。
y/set1/set2 将set1里的字符集转换成set2里边的字符集,跟tr不一样,sed要求set1 set2等长。也不支持字符范围,例如[a-z],也不支持POSIX character classes。
sed -i 's/lazy/laxy/; s/jumped/jimped/' foo.txt 用;分隔
修正符
g globally to a line,而不仅仅是第一次。
选项
-n 抑制自动打印
-f 将多个命令放到一个文件中。例如:
distros.sed:
# sed script to produce Linux distributions report
1 i\
\
Linux Distributions Report\
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
[me@linuxbox ~]$ sed -f distros.sed distros.txt
Linux Distributions Report
SUSE 10.2 2006-12-07
FEDORA 10 2008-11-25