当前位置: 首页 > ops >正文

个人笔记(linux/tr命令)

1. tr 命令(字符转换)

功能:字符替换、删除、压缩
核心语法

tr [选项] SET1 SET2

常用场景

场景命令示例说明
替换字符tr 'a-z' 'A-Z' < file小写转大写
删除字符tr -d '\r' < file删除Windows换行符(\r)
压缩字符tr -s ' ' < file将多个空格合并为1个
字符映射tr ' ' '\n' < file空格转换行符

注:在 tr 命令中,' ' 和 ' ' 之间必须有空格,因为它们是两个独立的参数

关键选项

  • -s:压缩连续重复字符(Squeeze)

  • -d:删除指定字符(Delete)

示例演示

# 原始文本:"hello   world"
echo "hello   world" | tr -s ' '  # 输出:"hello world"
echo "hello   world" | tr ' ' '\n'
# 输出:
# hello
#
# world

如果这样写呢tr -s ' ' '\n' < file

如果使用 tr -s ' ' '\n' < file(注意 -s 选项),效果会有 关键区别。以下是详细对比和解释:


原始命令 vs 加 -s 的命令

命令作用输入 "a b c"(多个空格)输出结果
tr ' ' '\n' < file单纯空格换行a⏎⏎⏎b⏎⏎c产生空行
tr -s ' ' '\n' < file压缩空格后换行a⏎b⏎c无空行

-s 选项的核心作用

  1. 压缩(Squeeze)
    将连续的多个空格 压缩为单个空格,然后再进行替换。

    bash

    # 处理流程:
    "a   b  c" → 压缩空格 → "a b c" → 替换空格 → "a\nb\nc"
  2. 避免空行
    如果不加 -s,多个连续空格会被分别替换为换行符,导致输出中出现空行。


实际案例演示

输入文件 file.txt 内容:
hello   world  how    are   you

(注意:单词间有 3个、2个、4个、3个空格)

两种命令对比:
  1. 不加 -s

    tr ' ' '\n' < file.txt

    输出

    helloworldhowareyou
    

    (出现多个空行)

  2. 加 -s

    bash

    tr -s ' ' '\n' < file.txt

    输出

    text

    hello
    world
    how
    are
    you

    (干净无空行)


为什么词频统计需要 -s

在统计词频时,如果有多余空行:

  1. 会被 sort 当作有效空行处理

  2. uniq -c 会统计空行的出现次数

  3. 最终结果会出现干扰项:

    3             # 空行的统计
    2 apple
    1 banana

使用 -s 可以确保 只处理有效单词


进阶技巧

如果想处理 所有空白字符(包括Tab):

bash

tr -s '[:space:]' '\n' < file.txt
  • [:space:]:匹配所有空白字符(空格、Tab等)


总结选择原则

场景推荐命令
严格按单个空格分割tr ' ' '\n'
处理人类输入的文本(可能有多个空格)tr -s ' ' '\n'
处理混合空白符(空格+Tab)tr -s '[:space:]' '\n'

在大多数实际应用中(包括词频统计),使用 tr -s ' ' '\n' 是更健壮的选择。

http://www.xdnf.cn/news/15492.html

相关文章:

  • LVS:高性能负载均衡利器
  • Java的Gradle项目,使用SLF4J+Log4j2+log4j2.xml
  • C++ 计数排序、归并排序、快速排序
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • xss作业
  • uniapp
  • 2025秋招突围战:AI智能监考如何重构远程笔试公平防线?
  • 深入解析 AWS RDS Proxy
  • 达梦数据库配置兼容MySQL
  • 从 “洗澡难” 到 “洗得爽”:便携智能洗浴机如何重塑生活?
  • Vue 结合 Zabbix API 获取服务器 CPU、内存、GPU 等数据
  • LabVIEW Occurrence功能
  • go项目实战
  • 高频面试雷区:Java Object六大核心方法源码剖析
  • Linux Ubuntu apt包管理器安装K8s1.30.1+Ingress-Nginx
  • fastadmin中ajax弹窗修改文字为英文
  • AJAX 技术
  • MinIO介绍以及结合SpringBoot的应用场景详解
  • 数据降维方法:PCA
  • 微算法科技研究量子视觉计算,利用量子力学原理提升传统计算机视觉任务的性能
  • flink sql读hive catalog数据,将string类型的时间戳数据排序后写入kafka,如何保障写入kafka的数据是有序的
  • 动态规划题解_打家劫舍【LeetCode】
  • 解决容器dns问题
  • [时序数据库-iotdb]时序数据库iotdb的安装部署
  • Go从入门到精通(25) - 一个简单web项目-实现链路跟踪
  • audiorecord 之 抢占优先级
  • 数据库询问RAG框架Vanna的总体架构
  • CMake基础:覆盖项目开发的五大配套工具
  • 数据结构——顺序表的相关操作
  • 信息学奥赛一本通 1552:【例 1】点的距离