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

来源:互联网 发布:2月进出口数据 编辑:程序博客网 时间:2024/05/28 05:15

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_filecat file | tr [A-Z] [a-z] > new_file# 把文件中的数字0-9替换为a-jcat 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_filecat file | tr -s "\r"  "\n" > new_file【注意】这里-s后面是两个参数"\r""\n",用后者替换前者# 用空格符\040替换制表符\011cat 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 4bbb 1 2 3 4xxx 1 2 3 4ccc 1 2 3 4ddd 1 2 3 4ooo 1 2 3 42.txt:aaa a b c dbbb a b c dzzz a b c dccc a b c dddd a b c dyyy a b c djoin 1.txt 2.txt:aaa 1 2 3 4 a b c dbbb 1 2 3 4 a b c djoin -o 1.1 -o 1.2 -o 2.4 1.txt 2.txtaaa 1 cbbb 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
0 0