Bash脚本:如何用Bash脚本中来自变量的特殊字符替换文本

分享于 

2分钟阅读

互联网

  繁體 雙語

问题:

首先,在bash脚本中有一个包含特殊字符的变量。 下面是示例。list.txt:


user = root


password = 1234



Bash脚本:


#!/bin/sh


var1 = var&2018+&


find. -name"list.txt" -exec sed -i"s/1234/"$var1"/g" {} +



执行脚本时,结果是: var12342018+1234.

更新 1 ( 按Oliv回答):


var1='var&2018+&'


find. -name"*list.txt" -exec bash -c 'sed -i"s/1234/$2/g" $1' _ {}"$var1" ;



结果仍然是:密码= var12342018+1234

也许任何人都能帮助我。 谢谢你


回答 1:

首先你需要引用你的var1 变量。

可以在 find 命令中使用 bash -c,以便将密码作为变量提供:


 var1='var&2018+&'


 find. -name"list.txt" -exec bash -c 'sed -i"s/1234/$2/g" $1' _ {}"$var1" ;




回答 2:

它可以能帮助你了解必须知道 & 是一个特殊字符,表示正则表达式的整个 MATCH。

由于 1234 已经找到,你正在用 var12342018+1234 替换它,这两个 & 正成为匹配的字符串。

我想做的另一点是个人偏好,但是使用 find.. . -exec,我不喜欢这种语法,我通常以结尾。

我更喜欢使用 xargs

find. -name list.txt | xargs sed -i 's/1234/var&2018+&/g'

注意结束的g 会将它替换为它所找到的次数。

这可能很明显。 我不知道你在子树中有多少个 list.txt 文件,但如果只有一个,则不需要 find

sed -i 's/pattern/replacement/options' filename



rep  文本  CHAR  spec  repl  VAR  
相关文章