Shell编程:文本处理器(grep、sort、uniq、tr 命令)



文本处理器 1

本章讲解 grepsortuniqtrcutsplitpaste 命令等。这些文本处理器通常用于数据过滤、转换、清理、格式化和提取等操作,是 Shell 脚本编程和数据处理任务中的核心工具。在 Unix/Linux 系统中,文本处理器可以独立使用,也可以通过管道 | 进行组合,构成强大的文本处理流水线。

grep 命令-搜索文本

grep 命令用于在文件中搜索符合条件的文本,并将符合条件的行打印出来。

语法格式

grep [选项]… 查找条件 目标文件

常用选项

  • -m [次数]:匹配 # 次后停止。(有空格)
  • -v:显示不被 pattern 匹配到的行,即取反。
  • -i:忽略字符大小写。(可有可无)
  • -n:显示匹配的行号。
  • -c:统计匹配的行数。
  • -o:仅显示匹配到的字符串。
  • -q:静默模式,不输出任何信息。
  • -A[#]:(After)显示匹配行之后的 # 行。(无空格)
  • -B[#]:(Before)显示匹配行之前的 # 行。(无空格)
  • -C[#]:(Context)显示匹配行的前后 # 行。(无空格)
  • -e:实现多个选项间的逻辑或(or)关系。
  • -w:匹配整个单词。
  • -E:使用ERE扩展正则表达式,相当于 egrep
  • -F:不支持正则表达式,进行精确匹配。
  • -f [文件]:从文件读取匹配模式。(有空格)
  • -r:递归目录,但不处理软链接。
  • -R:递归目录,且处理软链接。

示例

# 只显示第一个匹配到的行
grep -m 1 root /etc/passwd   

# 显示非空且非注释的行
grep -Ev '^[[:space:]]*#|^$' /etc/fstab  

# 统计匹配到的行数
grep -c root /etc/passwd  

# 匹配到的行及其后3行
grep -A3 root /etc/passwd   

# 显示包含 root 或 bash 的行
grep -e root -e bash /etc/passwd  

# 只匹配 root 这个单词
grep -w root /etc/passwd  

# 匹配两个文件中内容相同的部分
grep -f 123.txt 456.txt

# 递归搜索目录中包含字符串 'a' 的文件,不处理软链接
grep -r a /opt

# 递归搜索目录中包含字符串 'a' 的文件,处理软链接
grep -R a /opt

# 将非空行写入到 test.txt 文件
cat 123.txt | grep -v '^$' > test.txt

# 过滤以 "b" 开头的行
grep "^b" 123.txt

# 过滤以 "/" 结尾的行
grep '/$' 123.txt

sort 命令-行排序

sort 命令用于对文件内容(以行为单位)进行排序,可以根据不同的数据类型进行排序。

语法格式

sort [选项] 参数

常用选项

  • -f:忽略大小写,默认会大写字母排在前面。
  • -b:忽略每行前面的空格。
  • -n:按照数字进行排序。
  • -r:反向排序。
  • -u:去重,等同uniq,表示相同的数据仅显示一行。
  • -t:指定字段分隔符,默认使用 tab 键分隔。
  • -k:指定排序字段。(空格可有可无)
  • -o <输出文件>:将排序后的结果转存至指定文件。(有空格)

示例

sort -n test.txt     # 按数字大小排序
sort -n -r test.txt  # 倒序排列
sort -u test.txt     # 去重
cat /etc/passwd | sort -o aaa.txt  # 把整个 /etc/passwd 文件排序后保存到 aaa.txt
cat -n /etc/passwd | sort -n -o ky27.txt  #按照源文件的顺序传

uniq 命令-快捷去重

uniq 命令用于报告或忽略文件中连续的重复行,常与 sort 命令结合使用。

语法格式

uniq [选项] 参数

常用选项

  • -c: 统计连续重复的行的次数,并且合并重复的行。
  • -u: 显示仅出现一次的行(包括不连续的重复行)。
  • -d: 仅显示重复出现的行(必须是连续的重复行)。

示例

uniq -u test.txt  # 只显示出现一次的行
uniq -d test.txt  # 只显示连续重复的行
sort -n test.txt | uniq -c  # 对重复的数据行计数,并去重输出
sort -n test.txt | uniq -u  # 只展示不重复的数据行
sort -n test.txt | uniq -d  # 只展示重复的数据行

tr 命令-字符替换删除

tr 命令用于对来自标准输入的字符进行替换、压缩和删除。

语法格式

tr [选项] 参数

常用选项

  • -c:保留字符集1的字符,其他字符(包括换行符\n)用字符集2替换。
  • -d:删除所有属于字符集1的字符。
  • -s:将重复出现的字符串压缩为一个字符串,用字符集2 替换 字符集1。
  • -t:字符集2 替换 字符集1,不加也行。

参数

  • **字符集1:**指定要转换或删除的原字符集。
    • 转换操作:执行转换操作时,必须指定参数 “字符集2” 作为目标字符集。
    • 删除操作:执行删除操作时,不需要指定 “字符集2”。
  • **字符集2:**指定要转换成的目标字符集。

示例

echo 192.168.233.22 | tr '.' ' '  # 把 "." 替换成空格
echo ABC | tr "A-Z" "a-z"         # 大写替换成小写
echo abc | tr -c 'ab' 'a'         # 保留 ab,替换 c,输出abaa
        # 因为 tr 将输入中任何未匹配的字符都连续替换,导致重复的 a
echo abc | tr -d 'ab'             # 删除 ab,输出 c
sort -n test.txt | tr -s '\n'     # 排序输出,压缩空行为一个
echo $PATH | tr -s ":" "\n"      # 把 ":" 替换为换行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值