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

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:字数
  • 显示行首
  • -n

tail

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

dd

od

file

strings

pr

文本处理命令

  • tr
  • grep
  • cut
  • join
  • sort
  • wc
  • pr
  • head
  • tail
  • od
  • dd
  • file
  • strings
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值