Удаление шаблонов из строки с помощью bash

Я пытаюсь удалить некоторые шаблоны из строки ввода файла (разбор строки по строке). Вот пример строки:

1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT > [0x00,0xa2,…,0x00] 

И я хочу, чтобы результат был примерно следующим:

 (12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00] 

Я пытаюсь использовать egrep или sed но пока не повезло, просто продолжайте получать ошибки или некоторую ошибку «unterminited substitute pattern». Вот и пример того, что я пробовал:

 echo $line | sed -e 's/.*\s\([0-9]*:[0-9]*:[0-9]*.[0-9]*\)' 

Любая помощь будет оценена по достоинству. Я обычно больше парень пакетного файла вместо bash на моей Mac OS / X.

РЕДАКТИРОВАТЬ:

Должен заметить, я читаю файл как таковой:

 while read line do 

Затем я хочу выполнить любые действия в line для каждой строки в файле.

  • сравнить строку в bash
  • Как защитить скрипт sudo
  • Как получить время, когда система загрузилась в формате epoch?
  • Невозможно использовать аргумент в сценарии расчета даты bash
  • Получить имя эмулятора терминала внутри сценария оболочки
  • Сценарий Bash для удаления файла с именем index.html рекурсивно
  • как выбрать несколько выходов
  • Как хранить 10 случайных чисел в массиве, затем эхо-массив?
  • 3 Solutions collect form web for “Удаление шаблонов из строки с помощью bash”

    Вы также можете вызвать perl из bash . Параметр -n arg делает цикл для каждой строки. -e означает, что скрипт является одной строкой.

     cat in.txt | perl -ne 's{.*(.*\().*? (.*) -.*(:.*?)\s\s+.*(\[.*)}{$1$2$3 : $4};' 

    Это работает в вашей строке ввода:

      sed 's/.* \([0-9].*)\) .*>/(\1: RAW DATA OUT:/ ' <<\DATA 1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT > [0x00,0xa2,…,0x00] DATA 

    Он печатает:

     (12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00] 
     sed ' s/^[^(]*// s/([^ ]\+ /(/ s/ - CONSTANT ID// s/ \+>/ :/ ' <<DATA 1: (10/17 12:49:31.175) - CONSTANT ID: RAW DATA OUT > [0x00,0xa2,…,0x00] DATA 
     (12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00] 

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


    В замкнутом цикле:

     while read line; do echo "$line" | sed 's/^[^(]*//; s/([^ ]\+ /(/; s/ - CONSTANT ID//; s/ \+>/ :/' done < filename 
    Linux и Unix - лучшая ОС в мире.