Используя либо BSD, либо GNU sed
, заменив -i
на -e
(чтобы файл данных не был поврежден изменен и мог быть использован повторно - не используйте деструктивные опции, такие как -i
до тех пор, пока вы не узнаете, что все работает правильно, ради вашего же здравомыслия!), Я могу выполнить команду, которую вы показываете, и получить один и тот же вывод из двух, например:
first block of data
defg_0000077=/var/tmp /0000001AJC
defg_0000077=Y
defg_0000077=
defg_0000077=[A-za-z]*.*
defg_0000077=/tmp/
defg_0000077=1
defg_0000077=true
defg_0000077=pwd
defg_0000077=scp
defg_0000077=
second block of data
19197_abc=/opt/0000001AJC
19197_abc=
19197_abc=pwd
19197_abc=1
19197_abc=/
19197_abc=/usr
19197_abc=/usr/19197_abc7
19197_abc=
19197_abc=scp
19197_abc=true
AFAICS, это сделало все замены, которые вы запрашивали в обоих блоках данных. Разве это не результат, который вы ожидали? Чем отличается результат, который вы получаете от этого?
$ /opt/gnu/bin/sed -e 's/abcd_0000001/defg_0000077/g; s/74747_cnn/19197_abc/g; s/0000001/0000001AJC/g' data > gnu.out
$ /usr/bin/sed -e 's/abcd_0000001/defg_0000077/g; s/74747_cnn/19197_abc/g; s/0000001/0000001AJC/g' data > bsd.out
$ diff bsd.out gnu.out
$ cat
first block of data
abcd_0000001=/var/tmp /0000001
abcd_0000001=Y
abcd_0000001=
abcd_0000001=[A-za-z]*.*
abcd_0000001=/tmp/
abcd_0000001=1
abcd_0000001=true
abcd_0000001=pwd
abcd_0000001=scp
abcd_0000001=
second block of data
74747_cnn=/opt/0000001
74747_cnn=
74747_cnn=pwd
74747_cnn=1
74747_cnn=/
74747_cnn=/usr
74747_cnn=/usr/74747_cnn7
74747_cnn=
74747_cnn=scp
74747_cnn=true
$
Если вы получаете что-то другое, это означает, что у вас нет тех данных, которые указаны в вопросе в редактируемом файле. Если вы ожидаете чего-то другого, вам нужно объяснить, чего вы ожидаете и почему, потому что я считаю, что есть недоразумение.