我有一个 xml 文件,其中多次出现 MyID,如下所示。
MyID="dett090900990000"
我想MyID=""
用唯一值替换所有出现的值。
例如,如果我在 xml 文件中出现 3 次MyID=""
,当我运行脚本时,我将传递一个将用作 MyID 值的参数(但增量值将分配给每次出现)。
即当我将我的脚本运行为myscript.sh 7777777878889888
输出应如下所示(这意味着 MyID 的所有值都将更改,现在将具有唯一值)。它可以是任何东西(数字、字符串和混合)。
MyID="77777778788898881"
MyID="77777778788898882"
MyID="77777778788898883"
如您所见,1、2 和 3 将附加到提供的值中。
我正在寻找简单的命令来解决这个问题!谢谢你!
答案1
在 Perl 中可以这样完成:
perl -pe 'BEGIN { $v=shift; }
s/(MyID=")[^"]*(")/$1.$v.++$t.$2/ge' 7777777878889888 foo.xml bar.xml
答案2
这并不简单,但很有效。脚本有两个参数,Arg1 是要匹配的字符串,Arg2 是输入文件的文件名。该解决方案使用 awk 而不是 sed。
#!/bin/bash
# myscript.sh
# Usage myscript.sh <string to match> <filename>
MyID=$1
awk -v MyID=$MyID 'BEGIN{ mynum=1; } { if (match($0,MyID) ) { sub(MyID, sprintf("%s%d", MyID, mynum) ) mynum++; } print }' $2