История изменений
Исправление zzdnx, (текущая версия) :
В том-то и проблема. Дата не является крайним полем, и в документе нет строк с тремя полями вообще - в каждой строке по 5-7 полей. Задача состоит именно в том, чтобы залезть в середину строки, найти (по шаблону) от начала строчки первую дату и посмотреть - а есть-ли вторая дата следом за первой? Если дата есть - пропускаем, а если нет - вставляем после первой даты новое поле с текстом (об отсутствии даты в оригинале файла).
Доп-условия:
Поле, в котором встречается первая от начала строки дата не может быть на первом месте (это номер строки), или на последним месте (там ссылка вида \\server\public\...\...\), однако оно может «плавать» - быть на втором или третьем, а может, на четвёртом месте. В таких условиях sed -r 's/^([^\|]+)\|([^\|]+)\|([^\|]+)$/\1|\2|текст|\3/' не применимо.
Я потому и решился на «негативный просмотр вперёд» - чтобы не просто детектировать строку с датой, а чтобы на лету определять строки с одной датой вместо двух подряд, ну, и, править их, разумеется.
Расчитывал на что-то такое:
sed 's/^\(.*\)\(`DATA1`|\(?!`DATA2`|\)\)\(.*\)/\1\2текст|\3/g'
Исправление zzdnx, :
В том-то и проблема. Дата не является крайним полем, и в документе нет строк с тремя полями вообще - в каждой строке по 5-7 полей. Задача состоит именно в том, чтобы залезть в середину строки, найти (по шаблону) от начала строчки первую дату и посмотреть - а есть-ли вторая дата следом за первой? Если дата есть - пропускаем, а если нет - вставляем после первой даты новое поле с текстом (об отсутствии даты в оригинале файла).
Доп-условия:
Поле, в котором встречается первая от начала строки дата не может быть на первом месте (это номер строки), или на последним месте (там ссылка вида \\server\public\...\...\), однако оно может «плавать» - быть на втором или третьем, а может, на четвёртом месте. В таких условиях sed -r 's/^([^\|]+)\|([^\|]+)\|([^\|]+)$/\1|\2|текст|\3/' не применимо.
Я потому и решился на «негативный просмотр вперёд» - чтобы не просто детектировать строку с датой, а чтобы на лету определять строки с одной датой вместо двух подряд, ну, и, править их, разумеется.
Исходная версия zzdnx, :
В том-то и проблема. Дата не является крайним полем, и в документе нет строк с тремя полями вообще - в каждой строке по 5-7 полей. Задача состоит именно в том, чтобы залезть в середину строки, найти (по шаблону) от начала строчки первую дату и посмотреть - а есть-ли вторая дата следом за первой? Если дата есть - пропускаем, а если нет - вставляем после первой даты новое поле с текстом (об отсутствии даты в оригинале файла).
Доп-условия:
Поле, в котором встречается первая дата не может быть первым (это номер строки), или последним (там ссылка вида \\server\public\...\...\), однако оно может «плавать» - быть на втором или третьем, а может, на четвёртом месте. В таких условиях sed -r 's/^([^\|]+)\|([^\|]+)\|([^\|]+)$/\1|\2|текст|\3/' не применимо.