shell脚本学习笔记之文本处理命令
一.cut (截取文本字符或域字段)
命令格式:cut [option] file
1.-d和-f的组合用法,用来截取字段
说明:*表示分隔符,如-,:,空格字符等
N表示第N个字段
用法一:cut -d* -fN 从文本中截取每行以某个特定符号为分隔符的某个域字段
例子:cut -d:-f1 从文本中截取每行以冒号(:)为分隔符的第一个域字段
用法二:cut -d* -fNm-n 从文本中截取每行相邻的多个域字段
例子:cut -d:-f1-3 从文本中截取每行以冒号(:)为分隔符的多个域字段
用法三:cut -d* -fNm,n 从文本中截取每行不相邻的多个域字段
例子:cut -d: -f1,3 从文本中截取每行的第一个到第三个字符
2.-c用法 用来截取字符
用法一:cut -cN 从文本中截取一个字符
例子:cut -c1 从文本中截取每行的第一个字符
用法二:cut -cNm-n 从文本中截取每行相邻的多个字符多个字符
例子:cut -c1-5 从文本中截取每行的第一个到第五个字符
用法三:cut -cNm,n 从文本中截取每行不相邻的多个字符
例子:cut -c1,5 从文本中截取每行字符中的第一个和第五个字符
*** 注意:
1.cut命令只能截取单个文件中的字符或域字段
2.cut命令截取的字符或域字段是从所有行中截取的以列的形式显示到屏幕,而不是从某行或某些行中截取,也就是说cut命令不具备截取特定行特定字符或特定行特定域字段,只能从文本中所有行中截取,一般cut命令是针对具有某种排列次序的文本来使用的文本处理命令。
___________________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二.uniq (去除文本中的重复行)
命令格式:uniq [option] file
1.uniq -c 显示文本中相同行连续重复的次数
例子1:[root@node1 tmp]# uniq -c job
2 ggg
2 jjjjjjjjjjjj
例子2:[root@node1 tmp]# uniq -c job
2 ggg
2 jjjjjjjjjjjj
1 ggg
1 jjj
2.uniq -d 显示文本中重复的行(只显示一次)
例子: [root@node1 tmp]# uniq -d job
ggg
jjjjjjjjjjjj
3.uniq -u 显示文本中没有连续重复的行
例子: [root@node1 tmp]# uniq -u job
ggg
jjj
***注意:
这里要着重理解连续重复和重复所代表不同意义
_______________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三.paste(将不同文本中的数据合到新的文本)
命令格式:paste [option] file1 file2
1.paste file1 file2 将file1文本中的内容和file2文本中的内容显示为一个文本,同时将file1的内容作为第一个域字段,分隔符为tab(n个空格) 而file1作为第二个域字段显示,反之一样
例子: [root@node1 test]# paste passwd shadow
1.root:x:0:0:root:/root:/bin/bash root:$1$sovZvvQl$8HOSTtnMubbEdswFA3lnI/:16393:0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin bin:*:16393:0:99999:7:::
2.daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:16393:0:99999:7:::
3.adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:16393:0:99999:7:::
4.lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:*:16393:0:99999:7:::
5.sync:x:5:0:sync:/sbin:/bin/sync sync:*:16393:0:99999:7:::
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown shutdown:*:16393:0:99999:7:::
6.halt:x:7:0:halt:/sbin:/sbin/halt halt:*:16393:0:99999:7:::
2.paste -d* file1 file2 使用*(*可以为:或-或其他字符)为分隔符显示file1和file2组合后的新文本
例子:[root@node1 tmp]# paste -d- a b
jjj-kkk
3.paste -s file file2 将file1文本和file2文本以横向放入同一个文本中,也就是说先放file1文本,然后在下一行放 file2文本,也就说新的文本只有两行,即file1为一行,file2为另一行
4.paste -d* -s file file2 将file1文本和file2文本中本来不同行使用*分隔符区分,也就是说,原来的文本的每行内容之前用*分隔符作为域字段区分,而文本之间则以行区分。
例子:[root@node1 tmp]# cat m n
a
b
c
o
p
q
[root@node1 tmp]# paste -d: -s m n
a:b:c:
o:p:q
5.ls | paste -d“ ” - - -
例子:[root@node1 tmp]# ls | paste -d" " - - - - - -选项必须和ls及|结合使用
a b job m n
test tom
***注意:paste命令需要理解横行,竖行,字段的转变
____________________________________________________________________________________
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
四、cat(一次性显示文本所有内容)
cat [option] filename
1.cat -A filename 显示文本所有内容
2.cat -b filename 将文本中的行用编号进行排序显示(空白行不编号)
3.cat -E filename 在文本的每行末尾显示$符号
4.cat -n filename 将文本中的行用编号进行排序
5.cat -s filename 将文本中连续的多个空白行显示为一个空白行
6.cat -v filename 将文本中不可显示的字符(如制表符,新行符合换行符除外)显示出来
____________________________________________________________________________
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
五,more(以屏幕为单位逐屏显示文本内容)
more [option] filename
1.more -N filename 一次显示N行内容至屏幕
2.more -d filename 用于提示使用者如何逐屏查看文本内容和如何退出查看
3.more -f filename 计算行数时,以实际行计数,而不是自动换行后的计数
4.more -p filename 不以逐屏形式显示文本内容,而是先清除屏幕显示的文本内容,再显示其他内容
5.more -c filename 先显示内容,再清除屏幕
6.more -s filename 将多行空白行以一行计数
7.more +/ filename 通过搜索字符串来开始显示字符串后所有内容
8.more +n filename 通第n行开始显示文本内容
_______________________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
六、head
head [option] filename
1.head -N file N表示查看文本前N行
例子
head -8 file 查看文本前8行
++++++++++++++++++++++++++++++++++++++++++++++++++++++
七.tail
tail [option] filename
1.tail -N file N表示查看文本后N行
例子
tail -8 file 查看文本后8行
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
八.less
less file 逐屏查看文本内容
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
九.split ----将一个大文件切割成多个小文件,并在小文件中自动编号
split [option] 带切割的大文件 输出的小文件
选项
-或-l 这两个选项等价,都用于指导切割成小文件行数
-b 指导切割成小文件的字节
-C 与-b选项类似,不过,切割时尽量维持每行的完整性
例子
split -2 file 将文本按每两行生成一个文件
split -b50 file 将文件以50个字节为一个文件进行分割
split -C50 file 在以文本内容记录完整性为前提下,进量保证以50字节为为一个文件 个文件进行分割
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
十.join ----用于实现将两个文件中具有相同域的记录选择出来的连接操作
选项
-a1或-a2 除了显示以共同域进行连接的结果外,-a1表示还显示第二个文件中没有共同域的记录
-i 比较域内容时,忽略大小写差异
-o 设置结果显示的格式
-t 改变域分隔符
-v1或-v2 与-a选项类似,但是不显示以共同域进行连接的结果
-1和-2 -1用于设置文件1用于链接的域,-2用于设置文件2用于连接的域
语法:join [选项] 文件1 文件2
1.-a和-v选项
例子
join -t: file1 file2 只显示file1和file2中可以连接的行
join -t: -a1 file1 file2 除了显示可以连接的行,还显示file1的所有未连接的文件
join -t: -a2 file1 file2 除了显示可以连接的行,还显示file2的所有未俩件的文件
join -t: -v1 file1 file2 只显示file1中未连接的行
join -t: -v2 file1 file2 只显示file2中未连接的行
2.-o选项 ---用于改变结果显示的格式
例子
join -t: -o11.1 2.2 .12 file1 file2
显示的格式为依次显示第1个文件中的第一个域、第2个文件的第2个域、第1个文件的第2个域
3.-1和-2选项 用于设置文件所链接的域
例子
join -t: -i -1 3 -2 1 file1 file2
以文件1的第3域和文件2的第1域进行连接,并忽略大小写
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
十一、tr (用于字符转换)
tr [选项] 字符串1 字符串2
选项
-c 选定字符串1中字符集的补集,即反选字符串1中的字符集
-d 删除字符串1中出现的所有字符
-s 删除所有重复出现的字符序列,只保留一个
tr支持的控制字符 2.-s --删除所有重复出现的字符序列,只保留一个 tr "[o*5]" "*" 十二、sort 格式:sort [选项] [输入文件] 选项 2.-k选项 ---指定按某个域进行排序 3.-n选项 ---指定根据数字大小进行排序 4.-r选项 ---用于将排序结果逆向显示 5.-u选项 ---去除排序结果中的重复行 例子: 6.-o选项 --将输出到屏幕的文件另存为 sort -t: -k3n -c filename 测试filename是否按第三域的数值大小排序 8.-m选项 ---将两个排好序的文件合并成一个好、排好序的文件 sort -t: -m file1 file2 合并file1和file2
1.tr -d 字符
tr -d A-Z
\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
例子
tr -s "[\n]"
3.替换
tr "[a-z]" "[A-Z]"
4.-c ---选定字符串1中字符集的补集
tr -cs "[a-z][A-Z]" "{\012*}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c 测试文件是否已经被排列
-k 指定排序的域
-m 合并两个已排序的文件
-n 更加数字大小进行排序
-o[输入文件] 将输出写到指定的文件,相当于将输出重定向到指定文件
-r 将排序结果逆向显示
-t 改变域分隔符
-u 去除结果中的重复行
1.-t选项 --用于设置分隔符
例子:
sort -t: -k3 filename 根据第三域对文本排序
例子
sort -t: -k3 filename 根据第三域对filename排序(字符串方式排序)
例子:
sort -t: -k3n filename 根据第三域的数字由小到大排序
例子:
sort -t: -k3nr filename 将第三域按数字由大到小排序
sort -t: -u filename 利用-u去除文本中的重复行
例子:
sort -t: -k3n -o input file 将按要求排好序的文本input另存为file
7.-c选项 ---用于测试文件是否已经排好序
sort -t: -c filename 测试filename是否按默认方式排序