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

【Linux系列】Linux 中替换文件中的字符串

csdn

博客目录

      • 方法一:使用 `sed` 命令 (推荐用于脚本和快速替换)
        • 1. 基本语法(替换单个文件)
        • 2. 常用示例
      • 方法二:使用 `vim` 编辑器 (推荐用于交互式复杂编辑)
        • 1. 基本替换语法(在 vim 内)
        • 2. 常用示例与技巧

方法一:使用 sed 命令 (推荐用于脚本和快速替换)

sed (Stream Editor) 是专门为解析和转换文本而设计的命令行工具,非常适合批量替换。
在这里插入图片描述

1. 基本语法(替换单个文件)
sed -i 's/原字符串/新字符串/g' 文件名
  • -i最重要的选项,代表“就地(in-place)”编辑。没有它,sed 只会将结果打印到屏幕,而不会修改原文件。使用 -i 一定要先备份或确认命令无误!
  • s:表示替换操作(substitute)。
  • /:是分隔符,也可以用其他字符,如 #|,当原字符串或新字符串中包含 / 时特别有用。(例如:sed -i 's#/old/path#/new/path#g' file.txt
  • g:表示全局替换(global)。如果没有 g,则只替换每行中第一个匹配的字符串。
2. 常用示例
  • file.txt 中所有的 foo 替换为 bar

    sed -i 's/foo/bar/g' file.txt
    
  • 只替换每行第一个匹配的 foo(去掉 g 选项):

    sed -i 's/foo/bar/' file.txt
    
  • 删除所有空行(将空行替换为空):

    sed -i '/^$/d' file.txt
    # 注意:这里使用了删除命令 `d`,而不是替换 `s`
    
  • 替换包含特殊字符的字符串(如路径),使用不同的分隔符:

    sed -i 's#/home/user#/data/user#g' file.txt
    
  • **安全做法:先测试,再替换(不加 -i 先看效果)**

    sed 's/foo/bar/g' file.txt  # 只输出到屏幕,原文件不变
    # 确认输出无误后,再运行带 -i 的命令
    sed -i 's/foo/bar/g' file.txt
    
  • 备份原文件后再替换(给 -i 添加扩展名,如 .bak

    sed -i.bak 's/foo/bar/g' file.txt
    

    这会将原文件备份为 file.txt.bak,并修改 file.txt


方法二:使用 vim 编辑器 (推荐用于交互式复杂编辑)

如果你需要更复杂的编辑,或者想一边查看一边确认,vim 是完美的选择。

1. 基本替换语法(在 vim 内)

打开文件后,在命令模式下输入:

:%s/原字符串/新字符串/g
  • ::进入命令行模式。
  • %:表示范围是整个文件(% 代表所有行)。也可以指定行范围,如 :10,20s/foo/bar/g 只替换第 10 到 20 行。
  • s:替换操作。
  • g:全局替换。
2. 常用示例与技巧
  • 替换前逐个确认非常安全!
    在命令后添加 c (confirm):

    :%s/foo/bar/gc
    

    Vim 会为每个匹配项提示你:

    • y: 替换 (yes)
    • n: 不替换 (no)
    • a: 替换所有 (all)
    • q: 退出 (quit)
    • l: 替换当前一个然后退出 (last)
  • 忽略大小写

    :%s/foo/bar/gi
    # 添加 `i` (ignore case) 选项,会匹配 FOO, Foo, fOO 等
    
  • 替换时要求整词匹配(避免替换 football 中的 foo):

    :%s/\<foo\>/bar/g
    # \< 和 \> 分别代表单词的开头和结尾
    

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

http://www.dtcms.com/a/345136.html

相关文章:

  • 基于SpringBoot的考研学习交流平台【2026最新】
  • Nginx 创建和配置虚拟主机
  • 掌握设计模式--命令模式
  • 全面解析 `strchr` 字符串查找函数
  • Java面试宝典:Redis底层原理(持久化+分布式锁)
  • 智慧农业新基建:边缘计算网关在精准农业中的落地实践案例
  • C#_高性能内存处理:Span<T>, Memory<T>, ArrayPool
  • const(常量)
  • Android.bp 基础
  • 安全帽检测算法如何提升工地安全管理效率
  • AI 向量库:从文本到数据的奇妙之旅​
  • 编排之神--Kubernetes中包管理Helm工具详解
  • Jmeter压测实操指南
  • 金融量化入门:Pandas 时间序列处理与技术指标实战(含金叉死叉 / 均线策略)
  • GaussDB SQL引擎(1)-SQL执行流程
  • 从创新到落地:技术驱动下的企业管理变革新趋势
  • python-对图片中的人体换背景色
  • 小杰机械视觉(three day)——图象旋转、镜像、缩放、矫正
  • Android UI界面绘制
  • AI赋能体育训练突破:AI动作捕捉矫正精准、战术分析系统提效率,运动员破瓶颈新路径
  • AI计算提效关键。自适应弹性加速,基于存算架构做浮点运算
  • 自学嵌入式第二十五天:数据结构-队列、树
  • JavaWeb前端05(Vue工程化,Vue组件两种风格:组合式API 和 选项式API)及简单案例)
  • 文件下载和文件上传漏洞
  • FTP/TCP上传下载文件
  • C++ 判断: 深度解析与实战指南
  • 华中产业带跨境电商进阶:亚马逊加速器驱动下的多维度能力重构
  • CSS @media 媒体查询
  • Python从入门到自动化运维
  • 凌霄飞控开发日志兼新手教程——基础篇:认识基本的文件内容和相关函数作用(25电赛备赛版)