Замените на sed, используя переменную и добавив тоже - PullRequest
0 голосов
/ 16 декабря 2018

Я делаю эту замену

sed 's/<n3:CustId>.*<\/n3:CustId>/<n3:CustId>'"${orgkey}"'<\/n3:CustId>/' CAMBIOMINI.txt > CAMBIOMINI2.txt

, но теперь я хочу заменить строку за строкой другим значением orgkey, я хочу orgkey + = 1, но я не знаю, каксделать это в одной команде для всего файла CAMBIOMINI.txt

1 Ответ

0 голосов
/ 16 декабря 2018

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 появляется несколько раз в той же строке, что и:

<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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...