linux shell 字符替换命令

sed

文本 2.txt 内容如下:

shell 复制代码
1
2
3
4
5

11
121

abcabcc

1.替换文本指定字符或字符串,不更改原文件

将文本内容替换并输出,但不直接在原文档中修改: sed "s/旧字符串/新字符串/g" 文档

范例,将文本中的 1 替换为 b

shell 复制代码
root@heihei:/# sed "s/1/b/g" 2.txt
b
2
3
4
5

bb
b2b

abcabcc
root@heihei:/#

2.替换文本指定字符或字符串,不更改原文件,存储更改的内容到新文件

再次查看文档 2.txt,内容是没有变化的,想要储存就需要把结果另存到新的文件中

如下:

shell 复制代码
root@heihei:/# sed "s/1/b/g" 2.txt >> 3.txt
root@heihei:/# cat 3.txt
b
2
3
4
5

bb
b2b

abcabcc
root@heihei:/#

3.替换文本指定字符或字符串,直接更改原文件 加参数 -i即可

shell 复制代码
root@heihei:/# sed -i "s/1/b/g" 2.txt
root@heihei:/# cat 2.txt
b
2
3
4
5

bb
b2b

abcabcc
root@heihei:/#

4.替换文本指定字符或字符串,字符串为变量
sed "s/$old_str/$new_str/g" 文档

shell 复制代码
root@heihei:/# new_str='b'
root@heihei:/# old_str='1'
root@heihei:/# sed "s/$old_str/$new_str/g" 2.txt
b
2
3
4
5

bb
b2b

abcabcc

注意,需要用 双引号 "",假设用的单引号 ''

命令需要改成 sed 's/'$old_str'/'$new_str'/g' 文档

否则无法执行成功:

失败案例:

shell 复制代码
root@heihei:/# new_str='b'
root@heihei:/# old_str='1'
root@heihei:/# sed 's/$old_str/$new_str/g' 2.txt
1
2
3
4
5

11
121

abcabcc
root@heihei:/#

修改命令,成功达到预期结果

shell 复制代码
root@heihei:/# new_str='b'
root@heihei:/# old_str='1'
root@heihei:/# sed 's/'$old_str'/'$new_str'/g' 2.txt
b
2
3
4
5

bb
b2b

abcabcc
root@heihei:/#

5.这里记录一次用 tr -t "旧字符串" "新字符串"进行替换时遇到的坑

tr -t "旧字符" "新字符" 应该是这样的作用,接字符串时会出现问题

他的作用等同于sed "s/旧字符串/新字符串/g" 文档,但是如果接字符串时,并不是我认为的

将符合的字符串进行替换,而是依旧按照单字符挨个替换,如下

如下:

shell 复制代码
root@sh-z390-01:~/test/sed# x="0010086,sds"
root@sh-z390-01:~/test/sed# echo $x |tr -t "10086" "01472"
4404472,sds
root@sh-z390-01:~/test/sed# echo $x |tr -t "10086" "01"
1101186,sds

如上面的例子,我们指定了旧字符串 "10086",新字符串"01472"

但实际执行下来是将$x中所有的 1 更改为了0,所有的0 改成了1随后又被改为了4 ,8改成7,6改成2

实际上是按照

1 --> 0

0 --> 1

0 --> 4

8 --> 7

6 --> 2

这样的映射关系进行的单字符替换

相关推荐
爱写代码的森3 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
大耳朵-小飞象6 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技6 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++7 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室8 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影8 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙9 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码9 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
生活爱好者!9 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
groundhappy11 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python