Intereting Posts
setuid и setgid путаница Разница между командой справки, информацией и человеком Управление контейнерами LXC от хоста в марионетке Монетный двор 17.3 Не воспроизводить звук Postfix не может найти общую библиотеку MySQL Ограничить использование дискового буфера в SLES 11SP2, чтобы обеспечить более эффективную перезагрузку памяти на сервере esxi Какова цель локальных папок в Kmail и их можно удалить? Grub 2 не имеет доступа / dev / mmcblk0p1, SD-карта Из сценария bash существует ли способ получить привязку клавиш для «окна изменения размера»? Как разрешить аутентификацию с помощью `sudo` с помощью альтернативного пароля? Почему mknod требует привилегии root? Что такое плоский файл? Как добавить запись CAA на Debian Искать в меньшей степени с обтеканием в EOF Как я могу навсегда удалить предупреждение SSL для веб-браузера для сайтов HTTPS, которые не могут правильно идентифицировать себя?

Удаление шаблонов из строки с помощью 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 для каждой строки в файле.

Вы также можете вызвать 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