LINUX.ORG.RU

История изменений

Исправление 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/' не применимо.