shell脚本实现字符串的动态替换方法

 更新时间:2022年10月24日 14:54:30   作者:农民工老王  
这篇文章主要介绍了shell脚本实现字符串的动态替换,在shell脚本中全部替换的方式为${var//old/new},本文通过实现脚本给大家详细讲解,需要的朋友可以参考下

背景

我们有时候需要完成字符串的多组替换,比如需要完成以下替换

  • 将“小草”替换为“真是让人印象深刻”
  • 将“小狗的”替换为“可爱的”
  • 将“你听清楚了吗”替换为“我说明白了吗”
  • 将“我不会”替换为“我可以学”
  • 将“打麻将”替换为“修长城”
  • 将“打游戏”替换为“计算机实践练习”

在shell脚本中全部替换的方式为${var//old/new}。我们可以通过如下命令替换:

var=${var//小草/真是让人印象深刻}
var=${var//小狗/可爱的}
var=${var//你听清楚了吗/我说明白了吗}
var=${var//我不会/我可以学}
var=${var//打麻将/修长城}
var=${var//打游戏/计算机实践练习}

但是如果替换规则有变化,比如新增一条替换规则:将“单身狗”替换为“萌新”,那就要手动修改代码。如果只是一两个脚本还好,但是如果脚本较多,还是不好维护。

此时,就需要专门写一个工具实现这种文本替换,而且最好是将替换规则和代码分离,可以让非编程人员来维护替换规则。

下文是我的实现。

代码

shell脚本:ReplaceStr.sh:

#!/bin/bash
# ------------------------------------------
# Filename    : ReplaceStr.sh
# Version     : 1.1
# Date        : 2022-10-23 16:04:25
# Author      : 农民工老王@CSDN
# Email       : scwja@qq.com
# Website     : https://blog.csdn.net/monarch91
# Description : 用于追踪文件变化的脚本
# ------------------------------------------

needReplaceStr="$1"
listPath="$2"
if [ ! -f "${listPath}" ]; then
  echo "错误:脚本文件缺失!"
else
  IfsTemp=$IFS
  IFS=$';'
  fileList=$(cat "${listPath}"|xargs)
  fileArray=(${fileList})
  for item in "${fileArray[@]}"
  do
    itemLengthStr=$(echo ${item}|wc -L)
    itemLength=$((${itemLengthStr}))
    if [ ${itemLength} -gt 3  ] && [ "${item:0:1}" != "#" ]; then
      v=(${item//:/;})
      srcStr="${v[0]:1}"
      tarStr="${v[1]}"
      needReplaceStr=${needReplaceStr//${srcStr}/${tarStr}}
      needReplaceStr=${needReplaceStr//${srcStr^^}/${tarStr^^}}
      needReplaceStr=${needReplaceStr//${srcStr,,}/${tarStr,,}}
    fi
  done
  IFS=$IfsTemp
fi

echo "$needReplaceStr"

替换规则 map.txt:
第一行为标题不可删,从第二行开始为替换规则,每条规则,以英文冒号连接新旧字符串,以英文分号结尾。

#替换规则;
小草:真是让人印象深刻;
小狗的:可爱的;
你听清楚了吗:我说明白了吗;
我不会:我可以学;
打麻将:修长城;
打游戏:计算机实践练习;
单身狗:萌新

使用示例

使用方法为:./ReplaceStr.sh ${带操作字符串} ${替换规则},例如:

在这里插入图片描述

用shell实现某行字符串的替换

1.示例:

将/SE/test.conf文件中含有#__TEST__的行替换为http://127.0.0.1:1111;#__TEST__

2.实现:test_conf_contrl.sh

#/bin/sh
http=$1
test_conf=/SE/test.conf
Line=`cat test_conf | grep -wn "#__TEST__" | awk -F: '{print $1}'`
sed -i ''$Line'd' $test_conf
sed -i ''$Line'i '$1';#__TEST__' $test_conf

到此这篇关于shell脚本实现字符串的动态替换的文章就介绍到这了,更多相关shell脚本字符串替换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用于检测进程的shell脚本代码小结

    用于检测进程的shell脚本代码小结

    本文介绍一段shell脚本,它可以检测某进程或某服务是否正在运行,然后以邮件通知。有需要的朋友参考下
    2013-11-11
  • shell脚本中/bin/bash的作用引号与括号的使用小结

    shell脚本中/bin/bash的作用引号与括号的使用小结

    shell脚本通常第一句是#!/bin/bash,在很多情况中,如果没有设置好这一行,那么该程序很可能无法执行,#!/bin/bash是指此脚本使用/bin/bash来解释执行,本文给大家介绍shell脚本中/bin/bash的作用,引号与括号的使用,感兴趣的朋友一起看看吧
    2023-12-12
  • linux定时任务crontab 实现每秒执行一次的方法

    linux定时任务crontab 实现每秒执行一次的方法

    linux crontab 命令,最小的执行时间是一分钟。这篇文章主要介绍了linux定时任务crontab 实现每秒执行一次的方法,需要的朋友可以参考下
    2018-03-03
  • linux下文件描述符限制问题

    linux下文件描述符限制问题

    这篇文章主要介绍了linux下文件描述符限制问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Shell内置命令教程之alias和echo

    Shell内置命令教程之alias和echo

    我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式,shell提供了alias功能来简化我们的日常操作,下面这篇文章主要给大家介绍了关于Shell内置命令教程之alias和echo的相关资料,需要的朋友可以参考下
    2022-03-03
  • 在 SHELL 脚本中调用另一个 SHELL 脚本的方法(报错: go:not found)

    在 SHELL 脚本中调用另一个 SHELL 脚本的方法(报错: go

    在Linux平台上开发,经常会在console(控制台)上执行另外一个脚本文件,经常用的方法有:./my.sh 或 source my.sh 或 . my.sh;这三种方法有什么不同呢?这篇文章主要介绍了在 SHELL 脚本中调用另一个 SHELL 脚本的方法(报错: go:not found),需要的朋友可以参考下
    2023-08-08
  • Linux Netcat(nc)命令的使用方法详解

    Linux Netcat(nc)命令的使用方法详解

    在网络编程和网络安全领域,Netcat(简称 nc)是一个功能强大的工具,它可以用来监听网络端口、发送数据、接收数据等,Netcat 因其灵活性和强大的功能,被广泛用于网络调试和安全测试,本文介绍了Linux Netcat(nc)命令的使用方法,需要的朋友可以参考下
    2024-12-12
  • Linux shell脚本实现CPU预警

    Linux shell脚本实现CPU预警

    这篇文章主要介绍了Linux shell脚本实现CPU预警的方法,并附上代码以及用法,有需要的小伙伴可以参考下。
    2015-03-03
  • Linux中10个方便的Bash别名

    Linux中10个方便的Bash别名

    今天小编就为大家分享一篇关于Linux中10个方便的Bash别名,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • shell脚本快速删除服务器指定目录下文件(最新方法)

    shell脚本快速删除服务器指定目录下文件(最新方法)

    这篇文章主要介绍了shell脚本快速删除服务器指定目录下文件(最新方法),包括删除4天前的文件及只删除指定文件,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07

最新评论