我正在尝试编写一个bash文件,使用shell脚本在.txt文件中查找字符串,并希望将其替换为新字符串。
我正在尝试的字符串模式{{asdf}}
,我想从命令行arg中用ghjk
替换它。
我尝试使用以下bash文件:
ptr="\{\{(.*?)\}\}"
username="$1"
password="$2"
sed 's/$ptr/${username}/g' new.txt
sed 's/$ptr/${password}/g' sec.txt
但它不起作用。
答案 0 :(得分:0)
您需要使用双重代码才能将vars替换为其值
如果+
告诉至少一次,您可以使用
ptr="{{.\+}}"
sed "s/$ptr/${username}/g" usertemplate.txt > new.txt
使用sed
作为密码将是一个挑战,因为特殊字符(不要告诉别人,我的密码是/\\[.*&{7z
)。
你可以试试像
ptr="{{.\+}}"
username='/\\[.*&{7z'
escapedname=$(sed 's/[&=\/|]/\\&/g' <<< "$username")
sed "s/$ptr/${escapedname}/g" usertemplate.txt
编辑:我首先试图逃避大多数角色,但这对我来说很难 我把它改成了最小版本。我希望这个更好。
答案 1 :(得分:0)
您应该注意的一件事是 <!DOCTYPE HTML>
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript">
var initialDate = new Date(2012, 11, 1); // Dec 1st 2012
var now = Date.now();
var difference = now - initialDate;
var millisecondsPerDay = 24 * 60 * 60 * 1000;
var daysSince = Math.floor(difference / millisecondsPerDay);
document.getElementById('show').innerHTML = daysSince.toString();
</script>
</head>
<body>
<p id="show"></p>
</body>
</html>
单引号在shell编程中具有特殊含义。单引号否定变量,即它们不允许您访问变量的内容,而只是变量的名称。
您需要做的是删除单引号''
并用双引号括起来,即's/$ptr/${username}/g'
。
更好的是,如果你想使用单引号,你应该在这里使用字符串,就像指定walter一样。这里的字符串可以使用"s/$ptr/${username}/g"
完成。如果你决定在这里使用字符串,代码的逻辑将完全改变。
答案 2 :(得分:-1)
只需使用awk:
username="$1" awk '
{
gsub(/}}/,"\n")
delete a
if ( match($0,/{{[^\n]+\n/) ) {
a[1] = substr($0,1,RSTART-1)
a[2] = ENVIRON["username"]
a[3] = substr($0,RSTART+RLENGTH)
}
else {
a[1] = $0
}
gsub(/\n/,"}}",a[1])
gsub(/\n/,"}}",a[3])
print a[1] a[2] a[3]
}
' new.txt
以上内容适用于username
的任何值,如果/ {{foo}
(只有一个}
)出现在输入中,则不会失败。重复密码。在awk命令行上设置shell变量username
非常重要,如图所示,因此可以通过ENVIRON数组获取awk而无需导出它。