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

个人笔记(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.dtcms.com/a/282217.html

相关文章:

  • JAVA AI+elasticsearch向量存储版本匹配
  • es 启动中的一些记录
  • ELK日志分析,涉及logstash、elasticsearch、kibana等多方面应用,必看!
  • 深入解析交互设计流程:流程图+线框图+原型制作
  • Node.js基础用法
  • AJAX 技术
  • ubuntu+windows双系统恢复
  • 【官方回复】七牛云开启referer防掉链后小程序访问七牛云图片显示403
  • Golang学习之常见开发陷阱完全手册
  • CocosCreator3.8.x——多语言功能(简单版)
  • STM32CubeIDE生成 .hex 文件
  • Android 15 源码修改:为第三方应用提供截屏接口
  • 设计模式三:观察者模式 (Observer Pattern)
  • ble连接参数分析
  • 【基于PaddlePaddle训练的车牌识别系统】
  • 代码随想录算法训练营完结篇
  • 【BUG】ValueError: Unable to find out axis 2.0 in start_ornt
  • TCP重传
  • TCP 拥塞控制算法 —— 慢启动(Slow Start)笔记
  • Python练习(4)Python参数传递的20道核心实战练习题(含答案与深度解析)(上)
  • Hadoop(二)
  • neovim的文件结构
  • 数据结构:栈(区间问题)
  • 2025秋招突围战:AI智能监考如何重构远程笔试公平防线?
  • API Gateway HTTP API 控制客户端访问 IP 源
  • 【用图片内容改名】水印相机拍的照片,将照片的名字批量改为水印内容,根据水印内容批量命名图片的操作步骤和注意事项
  • Java大厂面试实录:从Spring Boot到AI大模型的深度技术拷问
  • SM3算法工程中添加bouncycastle.bcprov.jdk15on库
  • 【数据结构】双链表--从原理到(用C语言)实现全解析
  • 【Linux 学习指南】网络编程基础:从 IP、端口到 Socket 与 TCP/UDP 协议详解