Заменить содержимое файла, начинающееся с номера) и сохранить остальное содержимое строки

#sed

#sed

Вопрос:

Я хотел бы заменить файл, содержащий специальный шаблон, на sed или аналогичные решения. Я могу заменить файл отдельным sed, но номер может быть любым, и нужно сохранить префикс таким, какой он есть.

Фактический файл:

 1) L0 | Delete multiple contacts | C543072
2) L1 | Move Multiple Messages via Header toolbar Move button | C1832588
3) L1 | Move Multiple Messages contains file attachment | C2058412
- L1 | Forward message containing attachment | C1976614
- L0 | Normal message contains file attachment | PREAPPS-1488
- L3 | Forward as signed in message view | C1990347
  

Ожидаемый файл:

 FAILED - L0 | Delete multiple contacts | C543072
FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
SKIPPED - L1 | Forward message containing attachment | C1976614
SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
SKIPPED - L3 | Forward as signed in message view | C1990347
  

Пробовал код:

 sed -i 's/- L/SKIPPED - L/' /report.txt
sed -i 's/1) L0/FAILED - L0/' /report.txt
sed -i 's/[0-9]) L/FAILED - L[0-9]/' /report.txt (doesn't preserve LX)
  

Существует ли какая-либо отдельная команда, использующая регулярное выражение для замены содержимого вместе с сохранением LX, где строка начинается с номера) L[номер]?

Ответ №1:

Несколько команд в скрипте sed могут быть разделены точкой с запятой ( ; ).

 $ sed 's/^[0-9] )/FAILED -/; s/^-/SKIPPED -/' file
FAILED - L0 | Delete multiple contacts | C543072
FAILED - L1 | Move Multiple Messages via Header toolbar Move button | C1832588
FAILED - L1 | Move Multiple Messages contains file attachment | C2058412
SKIPPED - L1 | Forward message containing attachment | C1976614
SKIPPED - L0 | Normal message contains file attachment | PREAPPS-1488
SKIPPED - L3 | Forward as signed in message view | C1990347
  
  • ^ соответствует началу входной строки,
  • [0-9] соответствует одной или нескольким цифрам.

Комментарии:

1. Да, спасибо, что приняли вопрос, и ваше решение отличное! Я включил префиксные пробелы, и ваш код сработал очень хорошо.