Я хотел использовать SED для поиска и замены небольшой строки текста в нескольких файлах.
В частности, я хочу выполнить следующую замену:
sed -e '/35=R/s/|131=.*|/|131=$UNIQUE|/g' $f
Это выполняется в сценарии bash, где $ f - имя файла.
Sed ищет строки, содержащие строку 35 = R, а затем имеет очень простое выражение для замены |131=.*|
(что-либо после |131=)
на |131=$UNIQUE|
.
Кажется, что это отлично работает с некоторыми файлами, но в других случаях:
Например, рабочий пример:
До:
8=FIX.4.2|9=151|35=R|56=ABC|142=7848|50=STUFF|49=OTHERSTUFF|52=20250905-06:00:10.910|34=107|146=1|55=DE123|22=4|48=DE123|38=1|54=1|207=F|131=12ABC|10=243
После:
8=FIX.4.2|9=151|35=R|56=COBA|142=7848|50=STUFF|49=OTHERSTUFF|52=20250905-06:00:10.910|34=107|146=1|55=DE123|22=4|48=DE123|38=1|54=1|207=F|131=$UNIQUE|10=243
Однако в других случаях кажется, что на выходе отсутствуют большие блоки текста.
Пример не работает:
До:
8=FIX.4.2|9=147|35=R|34=15301|49=STUFF|52=20190905-15:27:54.305|56=OTHERSTUFF|115=STUFFY|131=1234abc|146=1|55=AB123|15=ZYX|22=4|38=1|48=AB123|54=2|207=STUFF|10=253
После:
8=FIX.4.2|9=147|35=R|34=15301|49=STUFF|52=20190905-15:27:54.305|56=OTHERSTUFF|115=STUFFY|131=$UNIQUE|10=253
Как видите, отсутствует все, что следует за трубкой после 131 = $ UNIQUE. Я новичок в выражениях и sed, поэтому, возможно, я неправильно понимаю замену. Любые указатели будут очень признательны.
Спасибо.