【发布时间】:2017-06-16 02:08:35
【问题描述】:
在 Bash 脚本中,我试图在文件中将两个给定字符串之间的字符替换为“X”。我有一堆字符串对,我希望在它们之间用“X”替换字符。
在下面的代码中,对中的 first 字符串在 cpi_list 数组中声明。对中的 second 字符串始终是 %26 或 & 或 ENDOFLINE
这就是我正在做的。
# list of "first" or "start" string
declare -a cpi_list=('%26Name%3d' '%26Pwd%3d')
# This is the "end" string
myAnd=\%26
newfile="inputlog.txt"
for item in "${cpi_list[@]}";
do
sed -i -e :a -e "s/\($item[X]*\)[^X]\(.*"$myAnd"\)/\1X\2/;ta" $newfile;
done
输入
CPI.%26Name%3dJASON%26Pwd%3dBOTTLE%26Name%3dCOTT
CPI.%26Name%3dVoorhees&machete
我想成功
CPI.%26Name%3dXXXXX%26Pwd%3dXXXXXX%26Name%3dXXXX
CPI.%26Name%3dXXXXXXXX&machete
PS:最后一项也需要将%26Name%3dCOTT 更改为%26Name%3dXXXX,即使没有结束%26 因为我正在寻找%26 作为终点或END OF THE LINE
但不知何故,它不起作用。
【问题讨论】:
-
你得到什么结果是?
-
%3dCOTT 因为它在 %26Name%3d 和行尾之间。
-
@chepner 这是我得到的结果
CPI.%26Name%3dXXXXXXXXXXXXXXXXXXXX%26Name%3dCOTT -
the same question 会被询问多少次?