linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

2023-11-05

本文是要讲linux 不打开文档/文件的情况下,替换文本内容。
打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本

话题相关
#linux 文件替换字符串
#sed 字符串替换
#shell 文件替换某行
#linux 替换指定行内容
#linux 替换某行

linux一般用sed来替换文本到指定行。

基本语法

s (substitute)为查找替换命令

# 在输出或打印中,替换字符串。并不改变原文件内容
sed '作用范围s/替换查找目标/替换成为/替换目标option' 文件名

# 替换字符串,并更改原文件内容
# 在sed后面加 -i,即编辑文档“edit files in place”选项
sed -i '作用范围s/替换查找目标/替换成为/替换目标option' 文件名

例,sed ‘s/cat/dog/g’ pet.txt
在全局范围(s前的作用范围无内容)查找cat并替换为dog,作用范围内每一行出现的不仅第一个目标,而是所有目标都会被替换(g)。

作用范围选项

  • 作用范围在全文的每一行,不写内容
# 作用范围在全文
sed 's/cat/dog/g' pet.txt

这一点这vim中的作用范围不太一样,vim中不写作用范围是作用于光标所在的当前行,而sed是指全文范围的每一行。

  • 指定行,写上行号;指定某行到某行,用逗号连接行号
# 作用范围在第1行
sed '1s/cat/dog/g' pet.txt

# 作用范围在第6行到第10行
sed '6,10s/cat/dog/g' pet.txt

# 作用范围在第6行到最后一行
sed '6,$s/cat/dog/g' pet.txt

# 作用范围在指定行到其后2行,用加号(减号不可用)
sed '1,+2s/cat/dog/g' pet.txt

替换查找目标 写法

  • 替换某个字符串,就写这个字符串。
    这是最基本的用法。
# 替换cat这个字符串
sed '1s/cat/dog/g' pet.txt
  • 替换整行,用.*
    个人经验,替换一整行的情况是用的最多的。
# 替换第1行一整行为dog
sed '1s/.*/dog/' pet.txt
# 这里因为.*已代表一整行,所有后面写上/g和上面相同效果
sed '1s/.*/dog/g' pet.txt

# 替换全文的每1行为dog
sed 's/.*/dog/' pet.txt
# 这里因为.*已代表一整行,所有后面写上/g和上面相同效果
sed 's/.*/dog/g' pet.txt

例,

$ cat test.txt
a,b,c
a,b,c
# 替换第1行整行
$ sed '1s/.*/hello/g' test.txt
hello
a,b,c
$ sed '1s/.*/hello/' test.txt
hello
a,b,c

# 替换全文每一行的全部内容
$ sed 's/.*/hello/g' test.txt
hello
hello
$ sed 's/.*/hello/' test.txt
hello
hello
  • 替换一个字符,用.
    这个用的相对少一些。
# 替换第1行的每一个字符
sed '1s/./dog/g' pet.txt

# 替换第1行的第1个字符
sed '1s/./dog/' pet.txt

# 替换第1行的第5个字符
sed '1s/./dog/5' pet.txt

例,

$ echo '123'|sed 's/./dog/g'
dogdogdog
$ echo '123'|sed 's/./dog/'
dog23
$ echo '123'|sed 's/./dog/3'
12dog
# 字符也包括符号
$ echo ',123'|sed 's/./dog/1'
dog123

替换目标option

  • 前面出现的g,作用范围内行的所有查找目标,而不仅是第一个查找目标
# 替换全文每一行的每一个 cat 为 dog
sed 's/cat/dog/g' pet.txt
  • 没有g,作用范围内所在行的第1个目标
# 替换全文每一行的第1个 cat 为 dog
sed 's/cat/dog/' pet.txt
  • 不打印出全文,仅打印更改所涉及行,或者说仅打印受影响的行
    在sed后面加 -n,是阻止默认的自动打印模式的选项,
    同时在 替换目标option 的位置 写上 p,表明打印print。
# 打印发生替换的行
sed -n 's/cat/dog/gp' pet.txt

sed的y命令

不同于上面的s命令,以字符串或模式为单位替换为一个整体,y是罗列置换每个对应的字符。

语法

sed 'y/查找的各个字符/对应替换后的各个字符/' 文件名

sed ‘y/abc/123’ test.txt ,这个命令会依次替换a,b,c为1,2,3 。
查找的各个字符对应替换后的各个字符的长度要一致。

例,

$ echo 'a,b,c,d,e'|sed 'y/abcde/12345/'
1,2,3,4,5

$ cat test.txt
a,b,c
a,b,c
$ sed 'y/abcde/12345/' test.txt
1,2,3
1,2,3

再比如 $ sed ‘1,5y/abcde/ABCDE/’ test.txt 是把1-5行内所有abcde转变为大写,但是,正则表达式元字符不能使用这个命令。
例,

$ cat copy.txt 
wang yi
zhang san
li qi

# 想要把1-2行的小写转化为大写,正则表达式不可用
$ sed '1,2y/[a-z]/[A-Z]/' copy.txt 
wAng yi
ZhAng sAn
li qi

# 罗列全部字母,来替换
$ sed '1,2y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' copy.txt 
WANG YI
ZHANG SAN
li qi

(以上。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 给文件替换字符串/替换内容/替换某行 (shell,sed) 的相关文章

  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 如何在不使用 MacPorts 或 Fink 的情况下在 OS X Leopard 上安装 lxml?

    我过去曾多次尝试过此操作并遇到问题 有没有人有在没有 MacPorts 或 Fink 的情况下在 OS X 上安装 lxml 的方法 并且绝对有效 最好有完整的 1 2 3 步骤来下载和构建每个依赖项 感谢 Twitter 上的 jesse
  • X 按键/释放事件捕获,与焦点窗口无关

    我想记录所有传入的按键事件 无论哪个窗口处于焦点状态或指针位于何处 我编写了一个示例代码 它应该捕获当前焦点窗口的按键事件 include
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 带变量的 AWK 负正则表达式

    我在 bash 脚本中使用 awk 来比较两个文件以获取不匹配的行 我需要将第二个文件的所有三个字段 作为一个模式 与第一个文件的所有行进行比较 第一个文件 chr1 9997 10330 HumanGM18558 peak 1 150 1
  • 使用 sed 使用另一个文件的内容替换文件内的文本块

    我希望用另一个文件的内容替换标记之间的文本块 我遇到了这个解决方案 但它只适用于一行 sed n foo p a N bar ba s n REPLACEMENT n p file line 1 line 2 foo REPLACEMENT
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 在Linux中将日期附加到文件名

    我想在文件名旁边添加日期 somefile txt 例如 somefile 25 11 2009 txt 或 somefile 25Nov2009 txt 或任何类似的内容 也许脚本或终端窗口中的某些命令可以执行 我正在使用Linux Ub
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • 如何防止 CMake 在构建时(而不是安装时)为共享库创建符号链接?

    我正在使用 CMake 在 Linux 上使用 Bullet3 构建一个项目 在构建整个解决方案时 它会构建附加了 SOVERSION 的 Bullet 输出库 并创建一个不带版本的符号链接 对于我的特定场景 我不喜欢这种行为 并且我不想编
  • 从sourceforge下载最新版本

    我正在尝试在 bash 脚本中从 Sourceforge 下载最新版本的graphicsmagick wget q https sourceforge net projects graphicsmagick files latest dow
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的
  • 如何按文件大小对查找结果进行排序

    如何按文件大小对 find 命令的结果进行排序 我试图对这个 find 命令的结果进行排序 find src type f print0 我不需要目录的大小 我需要仅按大小排序的文件相对路径 这是如何做的using find command
  • shell中基于正则表达式的颜色突出显示输出

    我想知道是否可以用颜色突出显示与某些字符串匹配的 shell 命令的输出 例如 如果我运行 myCommand 输出如下 gt myCommand DEBUG foo bar INFO bla bla ERROR yak yak 我希望所有
  • 如何修复 /usr/bin/env 参数处理?

    我遇到了一个奇怪的问题 usr bin env 我设计了一个简单的脚本来显示问题 该脚本使用 Ruby 编写 但使用 Python 编写的类似脚本也会发生同样的情况 这是脚本 usr bin env ruby p ARGV 还有一个没有 u
  • 如何从python导入路径中删除当前目录

    我想使用 Mercurial 存储库hg本身 也就是说 我克隆了 Mercurialhttps www mercurial scm org repo hg https www mercurial scm org repo hg并想运行一些h

随机推荐

  • Linux 的性能调优的思路

    Linux操作系统是一个开源产品 也是一个开源软件的实践和应用平台 在这个平台下有无数的开源软件支撑 我们常见的apache tomcat mysql等 开源软件的最大理念是自由 开放 那么Linux作为一个开源平台 最终要实现的是通过这些
  • offset client style 之间的区别

    offset 返回一个指向最近的 closest 指包含层级上的最近 包含该元素的定位元素 如果没有定位的元素 则 offsetParent 为最近的 table元素对象或根元素 标准模式下为 html quirks 模式下为 body 父
  • 【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 文献分享阅读 我用夸克网盘分享了
  • mysql alter字段,mysql alter 语句用法,添加、修改、删除字段

    mysql alter 语句用法 添加 修改 删除字段 主键 alter table tabelname add new field id int 5 unsigned default 0 not null auto increment a
  • Spark报错解决:org.apache.spark.SparkException: Task failed while writing rows.at org.apache.spark.sql.ex

    文章目录 报错信息 解决方法 报错信息 报错信息很长 这里截取了最先的一个错误信息 发现是写入文件时出错 Caused by org apache spark SparkException Job aborted due to stage
  • 数仓 面试题(离线)实战解答

    无意间翻到以前的数仓面试题 今天把它整理出来 方便你我他 数仓分层 为什么要对数仓进行分层 1 说说对数据仓库的理解 数据仓库是面向主题进行组织的 数据是集成的 不可更新的 随时间变化的的 数据仓库经历了这样三个阶段 简单报表阶段 数据集市
  • Go语言中如何在range循环中修改数组/切片内容

    在go语言中 我们经常会使用到range来帮助我们遍历一些数据 通常情况下都是查看操作多一些 但是当我们需要对其原地址上的内容进行变更时 通常都是使用 for i 0 i
  • mac下统计代码行数方法

    使用cloc工具统计 1 首先在终端执行命令下载cloc brew install cloc 没有brew的先下载brew 这个后面写一个 这里先占位 2 cloc使用 进入想要查询的项目文件夹 然后执行下面的命令查询 cloc 如下图所示
  • 【深入理解C++】调用父类的拷贝构造函数

    文章目录 1 默认的拷贝操作 2 调用父类的拷贝构造函数 3 用子类对象初始化父类对象 1 默认的拷贝操作 默认情况下 继承体系下类对象的拷贝是每个成员变量逐个拷贝 include
  • 下采样方法

    AntiAliasInterpolation2d代码解读 注记 最近在看一些视频驱动的代码时 常见一种特殊的下采样方法 故在这里记录一下 Class AntiAliasInterpolation2d nn Module 初始化 def in
  • 两个有序序列的中位数 (25 分)

    已知有两个等长的非降序序列S1 S2 设计函数求S1与S2并集的中位数 有序序列A 0 A 1 A N 1 的中位数指A N 1 2 的值 即第 N 1 2 个数 A 0 为第1个数 输入格式 输入分三行 第一行给出序列的公共长度N 0
  • Hive 中常用的查询语句解读及应用(分组、Join、排序语句)

    文章目录 Hive 中常用的查询语句 2 分组 2 1 Group By 语句 2 2 Having 语句 3 Join 语句 3 1 等值 Join 3 2 表的别名 3 3 内连接 3 4 左外连接 3 5 右外连接 3 6 满外连接
  • mysql数据库使用between and 的不包含右边界问题

    最近在公司经常支持业务部门数据提取 遇到了一个提取时间间隔的问题 想到了between and比较方便 之前经常用这个关键字 但是从来没思考过它的边界问题 所以趁这次研究了一下 废话不多说 直接上例子 select from user se
  • 【机器学习】支持向量机SVM及实例应用

    机器学习 支持向量机 1 分类超平面与最大间隔 2 对偶问题与拉格朗日乘子法 3 核函数 4 软间隔与正则化 5 实例应用 python使用支持向量机SVM 准备 数据集 导入SVM模块 步骤 1 读取数据集 2 划分训练样本与测试样本 3
  • cool使用es教程

    cool使用es教程 安装es8 1 0 将elasticsearch head文件运行至浏览器插件可以看到运行情况 安装ik分词器 将目录名称改名放置es安装目录plug目录 版本一定cool5 安装es8 1 0 官网 github下载
  • Flask03_路由传参

    encoding utf 8 1 app route 路由匹配 代表资源在服务器上的位置 1 路由 Flask根据http请求的url在路由表中和定义好的进行匹配 找到对应的函数处理这个请求 此过程保存一个url到函数的映射关系称之为路由r
  • (zxing.net)二维码Aztec的简介、实现与解码

    一 简介 Aztec Code是1995年 由Hand HeldProducts公司的Dr Andrew Longacre设计 它是一种高容量的二维条形码格式 它可以对ASCII和扩展ASCII码进行编码 当使用最高容量和25 的纠错级别的
  • pyqt多窗口设计(2步实现,嘴对嘴教学,源码复制可用)

    本文涉及 PyQt5 Qt Designer PyCharm 目录 先看下完成效果 步骤1 用Qt Designer创建2个窗体 步骤2 将子窗体和主窗体上的按钮控件进行关联 完整代码 先看下完成效果 视频里我只设计了1个主窗口和1个子窗口
  • MyBatis(2):MyBatis标签以及对应的属性用法讲解

    通过上一章的讲解 大家应该对MyByatis的基本用法有了一定的了解 这一章主要是讲一下MyBatis的各种标签以及对应的属性 它们的用法以及用的时候应该注意一些什么 下面的讲解时结合当前主流框架 Spring Spring MVC MyB
  • linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

    本文是要讲linux 不打开文档 文件的情况下 替换文本内容 打开文档 在文档 文件内替换内容的 可以用vim 可参考这篇文章vim 替换文本 话题相关 linux 文件替换字符串 sed 字符串替换 shell 文件替换某行 linux