我正在做这个替换
sed 's/<n3:CustId>.*<\/n3:CustId>/<n3:CustId>'"${orgkey}"'<\/n3:CustId>/' CAMBIOMINI.txt > CAMBIOMINI2.txt
但现在我想用不同的 orgkey 值逐行替换,我想要 orgkey+=1 但我不知道如何在同一命令中为所有 CAMBIOMINI.txt 文件制作它
最佳答案
Sed
可能不适合您要更改替换的情况
对于每次出现。
如果我对您的要求的理解是正确的,那么以下将起作用:
awk 'FNR==NR {orgkey[++i]=$0; next}
{print gensub(/<n3:CustId>[^<]*<\/n3:CustId>/,"<n3:CustId>" orgkey[++j] "</n3:CustId>", "g")} ' orgkey.txt CAMBIOMINI1.txt
其中 orgkey.txt
包含替换列表:
orgkey_a
orgkey_b
orgkey_c
orgkey_d
和CAMBIOMINI1.txt
看起来像:
<n3:CustId>id1</n3:CustId>
<n3:CustId>id2</n3:CustId>
<n3:CustId>id3</n3:CustId>
<n3:CustId>id4</n3:CustId>
那么结果将是:
<n3:CustId>orgkey_a</n3:CustId>
<n3:CustId>orgkey_b</n3:CustId>
<n3:CustId>orgkey_c</n3:CustId>
<n3:CustId>orgkey_d</n3:CustId>
请注意,它不假设 CAMBIOMINI1.txt
中的标 checkout 现多个
时间在同一行:
<n3:CustId>id1</n3:CustId> <n3:CustId>id2</n3:CustId>
<n3:CustId>id3</n3:CustId>
<n3:CustId>id4</n3:CustId>
在这种情况下,请改用 Perl 版本:
perl -nle 'if (@ARGV) {push(@orgkey, $_); next}
s#<n3:CustId>.*?</n3:CustId>#"<n3:CustId>" . $orgkey[$j++] . "</n3:CustId>"#ge; print' orgkey.txt CAMBIOMINI1.txt
关于linux - 使用变量替换为 sed 并添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798306/