首页 > 系统相关 >linux - 字符串替换

linux - 字符串替换

时间:2024-06-20 10:22:41浏览次数:14  
标签:val hello sed file linux 字符串 txt 替换

使用场景:部署项目的时候,需要统一修改 IP 地址等内容。

缺点:这些命令,都缺少必要的校验功能,容易因为操作失误,会出现 未替换,或者替换成空串 的情况。

比如说:写了好多行的 sed命令,不小心删了一行代码,这种情况下,执行代码不会报错,因此很容易埋下安全隐患。

推荐:要进行很复杂的替换时,还是尽量通过业务代码进行控制。

sed 命令

效果类似于 windows 环境下的文本替换,将文件中所有旧的字符替换成新的字符。

# 将文件 file.txt 中的所有 hello 替换为 world
sed -i 's/hello/world/g' file.txt

# 将文件 file.txt 中的所有 hello 替换为变量 val
val=a;sed -i "s/hello/${val}/g" file.txt

# val 中存在 '/' 字符的情况,语句会报错;
val=a/;sed -i "s/hello/${val}/g" file.txt

# 这时候,将命令中的 '/' 替换为 '#' 即可;
# 很明显,这也导致另一个问题,val 中不能存在 '#'。
val=a/;sed -i "s#hello#${val}#g" file.txt

# sed 命令并不是专业的字符替换工具,能用但是不好用,很容易因为特殊字符导致出错。

我们可以写一个脚本,解决 sed 命令转义问题

# 新建一个 shell 脚本,输入下列内容
#!/bin/bash

src=$1:
tar-$2
file=$3;

b='/';
c='\/';
src=${src//$b/$c};
tar=${tar//$b/$c};

sed -i "s/${src}/${tar}/g" $file;

# 脚本的使用方式,将字符串 'a' 替换为 '/a'
./replace.sh 'a' '/a' test.txt

awk 命令

用新的字符替换旧的字符,并且生成一份新的文件。

awk 更复杂一些,同时也有更高级的应用,就像短信模版一样,预先做一些占位符,等到使用的时候,填充具体的参数值,方便程序进一步调用。

# 定义两个变量
old_string="原始值";new_string="新的值";
 
# 用新的值替换旧的值,并生成一份新的文件
awk -v old=$old_string -v new=$new_string '{gsub(old, new)}1' input.txt > output.txt

# 替换多个字符串
awk '{gsub("World", "Universe"); gsub("Hello", "Hi")}1'

标签:val,hello,sed,file,linux,字符串,txt,替换
From: https://www.cnblogs.com/chenss15060100790/p/18258157

相关文章

  • #C:比如有如下两个字符串:“hello“、“helhehe“不能使用库函数完成字符串的比较
    #include<stdio.h>#include<string.h>voidtest00()//比如有如下两个字符串:"hello"、"helhehe"不能使用库函数完成字符串的比较{ //时刻需要注意变量i的值  charbuf1[128]="";   printf("请输入第一个字符串buf1:");   //scanf("%s",buf1);......
  • #c:键盘输入一个字符串判断它是不是回文 回文:123321
    小小案例仅供参考:/键盘输入一个字符串判断它是不是回文比如:12321这个就是回文#include<stdio.h>#include<string.h>voidtest01(){  charbuf[128]="";  printf("请输入一个字符串:\n");  fgets(buf,sizeof(buf),stdin);  buf[strlen(buf)-1]=0; ......
  • (转)Linux环境下使用logrotate工具实现nginx日志切割
    原文:https://www.cnblogs.com/even160941/p/13903291.html一.前提背景及需求Nginx运行日志默认保存在Nginx安装目录下的 /usr/local/nginx/logs目录(或/var/log/nginx目录下),包含access.log和error.log两个文件。(1) access.log 记录了哪些用户、哪些页面以及用户浏览器、i......
  • linux - curl
    curl(commandlineuniformresourcelocator),URL命令行,用于发送http请求场景:项目运维过程中,如果没有postman工具,会用到这些命令;docker容器内,如果没有开放端口,只能进容器内用curl进行测试了。#不带有任何参数时,curl默认发出GET请求。curlhttps://www.baidu.com......
  • linux - nfs挂载
    NFS(全称NetworkFileSystem),即网络文件系统。通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。一般的挂载,是买一个新硬盘,然后挂载到我们的系统,而NFS挂载,是把其它主机的文件夹,挂载到我们的系统,完成NFS挂载之后,操作其它主机的文件,就像操作本机的文件一样。效果:理解......
  • linux - grep
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。grep(globalregularexpression)命令,用于查找文件中符合条件的字符串基本语法:grep[选项][文件]参数选项:-i:忽略大小写进行匹配。-v:反向查找,只打印不匹配的行。-n:显示匹配行的行号。-r:递归查找子目......
  • linux - cat
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。cat(英文全拼:concatenate)命令,用于连接文件并打印到标准输出设备上。命令语法:cat[选项][文件]参数选项:-n:显示行号;-b:显示非空行号;-s:合并空白行;-E:在每行结尾添加$符号;-T:将制表符显示为^I,tab键......
  • linux - tail
    系统运维中,查看日志时,最经常使用的就是grep、cat和tail三个命令。head与tail是两个成对的命令,语法基本一致,head用于看文件开头,tail用于看文件结尾。区别:使用-n命令是,含义可能与理解的不同;head无法持续跟踪文件内容,也就是没有说-f命令。#查看文件的最后10行内......
  • (超详细)三级信息通信网络运行管理员第七套linux实操题讲解(五)
    目录一、Linux实操部分前期解析二、创建卷组 ​编辑 三、创建逻辑卷四、磁盘挂载一、Linux实操部分前期解析 接着上一期,我们讲解完了ENSP部分,现在到了Linux部分的实操,如下图:  可以看到Linux部分有17道题,总分50分,难度也是不难的,做linux部分我建议先准备一下前期......
  • Linux 中断实验
    Linux中断实验先来回顾一下裸机实验里面中断的处理方法:①、使能中断,初始化相应的寄存器。②、注册中断服务函数,也就是向irqTable数组的指定标号处写入中断服务函数②、中断发生以后进入IRQ中断服务函数,在IRQ中断服务函数在数组irqTable里面查找具体的中断处理函数,找......