背景
我们有时候需要完成字符串的多组替换,比如需要完成以下替换
- 将“小草”替换为“真是让人印象深刻”
- 将“小狗的”替换为“可爱的”
- 将“你听清楚了吗”替换为“我说明白了吗”
- 将“我不会”替换为“我可以学”
- 将“打麻将”替换为“修长城”
- 将“打游戏”替换为“计算机实践练习”
在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脚本字符串替换内容请搜索aitechtogether.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持aitechtogether.com!