linux - 使用变量替换为 sed 并添加

标签 linux variables unix sed replace

我正在做这个替换

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/

相关文章:

linux - 附加 GDB 调试器和记录回溯

c++ - 如何在 C 中找到可执行文件的位置?

c++ - 到处使用 std::size_t 是一种好习惯吗?

unix - 一次中断所有 lerna --parallel 任务

linux - 如何在不支持 ypchsh 的远程计算机中更改 Linux shell

Perl:变量值为 'glob' ,但应该是 'scalar'

php - 将变量从 MY_Controller 传递到 View

c++ - 如何在没有 print(f) 等标准 C 函数的情况下将 char 转换为八进制格式

linux - 如何从 UNIX 中的文件中删除单词?

Python文件输出添加奇怪的字符