您的位置:首页 > 运维架构 > Shell

Shell脚本学习指南(四)——文本处理工具

2016-05-15 18:47 561 查看

grep

字符串查找,默认用BRE

grep [options] ‘string’ filename

-E 使用ERE

-a 以文本文件方式搜索

-c 计算找到的符合行的次数

-i 忽略大小写

-n 顺便输出行号

-v 反向选择,即显示不包含匹配文本的所有行

-h 查询多文件时不显示文件名

-l 查询多文件时只输出包含匹配字符的文件名

-s 不显示不存在或无匹配文本的错误信息

grep -c "abc" test.txt #统计含有abc的行数
grep -i "May" test.txt #查找含有May的行,不区分大小写
grep -n "abc" test.txt #查找含有abc的行,输出时加上行号
grep -v "abc" test.txt #查找不含有May的行
grep "a\{3,\}" test.txt #查找至少重复出现3个a的行
grep "a\{3,7\}" test.txt #查找重复出现3-7个a的行


tr

字符转换

-c:取反

-d:删除

-s:把连续重复的字符以单独一个字符表示

# 将文件file中出现的"abc"替换为"xyz"
cat file | tr "abc" "xyz" > new_file

# 使用tr命令“统一”字母大小写
cat file | tr [a-z] [A-Z] > new_file
cat file | tr [A-Z] [a-z] > new_file

# 把文件中的数字0-9替换为a-j
cat file | tr [0-9] [a-j] > new_file

# 删除文件file中出现的"Snail"字符
cat file | tr -d "Snail" > new_file
【注意】这里,凡是在file文件中出现的'S','n','a','i','l'字符都会被删除!而不是紧紧删除出现的"Snail”字符串

# 删除文件file中出现的换行'\n'、制表'\t'字符,不可见字符都得用转义字符来表示
cat file | tr -d "\n\t" > new_file

# 删除“连续着的”重复字母,只保留第一个
cat file | tr -s [a-zA-Z] > new_file

# 删除空行
cat file | tr -s "\n" > new_file

# 删除Windows文件“造成”的'^M'字符
cat file | tr -d "\r" > new_file
cat file | tr -s "\r"  "\n" > new_file
【注意】这里-s后面是两个参数"\r"和"\n",用后者替换前者

# 用空格符\040替换制表符\011
cat file | tr -s "\011" "\040" > new_file

# 把路径变量中的冒号":",替换成换行符"\n"
echo $PATH | tr -s ":" "\n"


cut

从输入中截取选定的部分

-d 指定分隔符

-f 指定字段

-c 指定字符

cut -d: -f1,7 /etc/passwd    #以:为分隔符,打印/etc/passwd的第1、第5字段
who | cut -c 1-16,26-38      #打印/etc/passwd的第10-25字符


join

基于共同的键值,合并记录

-1 filed1 -2 filed2 指明要结合的字段

-t 指定分隔符

1.txt:
aaa 1 2 3 4
bbb 1 2 3 4
xxx 1 2 3 4
ccc 1 2 3 4
ddd 1 2 3 4
ooo 1 2 3 4

2.txt:
aaa a b c d
bbb a b c d
zzz a b c d
ccc a b c d
ddd a b c d
yyy a b c d

join 1.txt 2.txt:
aaa 1 2 3 4 a b c d
bbb 1 2 3 4 a b c d

join -o 1.1 -o 1.2 -o 2.4 1.txt 2.txt
aaa 1 c
bbb 1 c


sort

将输入的文本排序

-b:忽略开头的空白

-c:检查输入是否已经排序

-d:字典顺序,仅文字、数字和空白有意义

-g:浮点值排序

-f:忽略大小写

-i:忽略无法打印的字符

-k:定义排序键值

-m:将已排序的输入文件,合并为一个排序后的输出数据流

-n:整数排序

-o:指定输出文件

-r:逆序排序

-t:指定分隔符

-u:只保留唯一的记录

sort -t: -k2 /etc/passwd       #以:为分隔符,从第2个字段开始,到记录的结尾排序
sort -t: -k2,2 /etc/passwd     #以:为分隔符,从第2个字段开始,到第2个字段的结尾排序
sort -t: -k2,5 /etc/passwd     #以:为分隔符,从第2个字段开始,到第5个字段的结尾排序
sort -t: -k2.4,5.6 /etc/passwd #以:为分隔符,从第2个字段的第4个字符开始,到第5个字段的第6个字符排序
sort -t: -k3n,3 /etc/passwd    #以:为分隔符,以第3个字段的整数值排序
sort -t: -k3nr,3 /etc/passwd   #以:为分隔符,以第3个字段的整数值的逆序排序
sort -t: -k3n -k4n /etc/passwd #以:为分隔符,先以第3个字段的整数值的逆序排序,在结果中对第4个字段排序
sort -t: -k3n,3 -u /etc/passwd #以:为分隔符,以第3个字段的整数值排序,在结果中只保留第一条


uniq

数据过滤

-c:在每行前加上重复次数

-d:仅显示重复的行

-u:仅显示不重复的行

fmt

重新格式化段落

-s:仅切割较长的行

-w n:设置输出宽度

wc

字数统计工具

-l:行数

-c:字节数

-w:字数

head

显示行首

-n

tail

显示行尾

-n

-f:每隔1秒显示文件的行尾,看日志文件时很有用;此选项不可用于脚本

dd

od

file

strings

pr

文本处理命令

tr

grep

cut

join

sort

wc

pr

head

tail

od

dd

file

strings
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: