文章目录
文本处理器 1
本章讲解 grep
、sort
、uniq
、tr
、cut
、split
、paste
命令等。这些文本处理器通常用于数据过滤、转换、清理、格式化和提取等操作,是 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" # 把 ":" 替换为换行
标签:sort,Shell,grep,字符集,tr,uniq,txt From: https://blog.csdn.net/qq_44421043/article/details/141867212