shell腳本實現(xiàn)字符串的動態(tài)替換方法
背景
我們有時候需要完成字符串的多組替換,比如需要完成以下替換
- 將“小草”替換為“真是讓人印象深刻”
- 將“小狗的”替換為“可愛的”
- 將“你聽清楚了嗎”替換為“我說明白了嗎”
- 將“我不會”替換為“我可以學(xué)”
- 將“打麻將”替換為“修長城”
- 將“打游戲”替換為“計算機(jī)實踐練習(xí)”
在shell腳本中全部替換的方式為${var//old/new}
。我們可以通過如下命令替換:
var=${var//小草/真是讓人印象深刻} var=${var//小狗/可愛的} var=${var//你聽清楚了嗎/我說明白了嗎} var=${var//我不會/我可以學(xué)} var=${var//打麻將/修長城} var=${var//打游戲/計算機(jī)實踐練習(xí)}
但是如果替換規(guī)則有變化,比如新增一條替換規(guī)則:將“單身狗”替換為“萌新”,那就要手動修改代碼。如果只是一兩個腳本還好,但是如果腳本較多,還是不好維護(hù)。
此時,就需要專門寫一個工具實現(xiàn)這種文本替換,而且最好是將替換規(guī)則和代碼分離,可以讓非編程人員來維護(hù)替換規(guī)則。
下文是我的實現(xiàn)。
代碼
shell腳本:ReplaceStr.sh:
#!/bin/bash # ------------------------------------------ # Filename : ReplaceStr.sh # Version : 1.1 # Date : 2022-10-23 16:04:25 # Author : 農(nóng)民工老王@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"
替換規(guī)則 map.txt:
第一行為標(biāo)題不可刪,從第二行開始為替換規(guī)則,每條規(guī)則,以英文冒號連接新舊字符串,以英文分號結(jié)尾。
#替換規(guī)則;
小草:真是讓人印象深刻;
小狗的:可愛的;
你聽清楚了嗎:我說明白了嗎;
我不會:我可以學(xué);
打麻將:修長城;
打游戲:計算機(jī)實踐練習(xí);
單身狗:萌新
使用示例
使用方法為:./ReplaceStr.sh ${帶操作字符串} ${替換規(guī)則}
,例如:
用shell實現(xiàn)某行字符串的替換
1.示例:
將/SE/test.conf文件中含有#__TEST__的行替換為http://127.0.0.1:1111;#__TEST__
2.實現(xiàn):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
到此這篇關(guān)于shell腳本實現(xiàn)字符串的動態(tài)替換的文章就介紹到這了,更多相關(guān)shell腳本字符串替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell基礎(chǔ)學(xué)習(xí)中的字符串操作、for循環(huán)語句示例
這篇文章主要介紹了shell基礎(chǔ)學(xué)習(xí)中的字符串操作、for循環(huán)語句示例2014-04-04監(jiān)控服務(wù)器swap并重啟php的Shell腳本
有一臺服務(wù)器老是交換扇區(qū)占滿然后失去響應(yīng),很煩,因為加載了以前別人寫的一個php擴(kuò)展,效率低,資源占用大,悲劇的是現(xiàn)在還沒有可以替換的東西2014-03-03