Задача SED, агрегирование строки, содержащей фигурные скобки

Я пытался использовать sed для агрегирования определенного шаблона строки в тексте в течение нескольких часов, но не могу найти решение. Надеюсь, вы, ребята, знаете, как это сделать !?

Пример:

#/!bin/bash text="Column One(TAB)(TAB)(TAB)Column Two(TAB)(TAB)Column three(TAB)Column4" modText=`echo $text | sed 's/([(]\{1\}TAB[)]\{1\})\{2,8\}/(TAB)/g'` 
  • Я пробовал несколько версий sed-команды, один из которых является одним из них. Моя оригинальная идея была modText = `echo $ text | sed 's / \ (TAB \) \ {1 \}) \ {2,8 \} / (TAB) / g'`

Было бы здорово, если бы вы могли мне помочь. Почувствовал, что решение не так далеко, но у меня больше нет идей, и мои исследования этого не сделали: -S


Пример текста

«Столбец один (TAB) (TAB) (TAB) Столбец второй (TAB) (TAB) Столбец три (TAB) Столбец4"

Мои критерии поиска будут сопоставляться с первыми двумя (TAB) группами, происходящими между «Столбец Один» и «Столбец три».

Результат будет выглядеть следующим образом:

«Столбец один (TAB) Столбец второй (TAB) Столбец три (TAB) Столбец4"

  • Запустите сценарий оболочки через символическую ссылку из каталога, содержащего сам сценарий
  • Сохранение параметров `find` в переменной
  • Манипулирование линиями с неупорядоченными полями
  • Выход из сценария оболочки, если некоторые дочерние процессы завершаются
  • Текстовый файл процесса - Извлечь данные, начиная с номера
  • Удаление строк на основе тегов для разных файлов и слияние в один файл
  • Искать каталоги для многострочной строки
  • Как выполнить команду случайным образом в течение заданного интервала времени?
  • 2 Solutions collect form web for “Задача SED, агрегирование строки, содержащей фигурные скобки”

    Я не уверен, что понимаю, как должно применяться предложение «максимум 8», но наивный подход будет примерно таким:

     sed 's/\((TAB)\)\{2,8\}/(TAB)/g' 

    Если вы имеете в виду, что замена не должна выполняться, если имеется более 8 соседних (TAB) , вы можете сделать:

     sed ' s/_/_u/g; # escape _ s/|/_p/g; # escape | s/(TAB)/|/g; # use a single character in place of (TAB) s/.*/<&>/; # add leading and trailing non-| character s/\([^|]\)|\{2,8\}\([^|]\)/\1|\2/; # replace up to 8 | provided # they are not preceded nor followed # by | s/.\(.*\)./\1/; # undo wrapping s/|/(TAB)/g; # undo replacement s/_p/|/g;s/_u/_/g; # undo escaping' 

    Если ваш sed (например, ssed ) поддерживает perl-подобные ssed , вы можете использовать операторы look-around:

     ssed -R 's/(?<!\(TAB\))(\(TAB\)){2,8}(?!\(TAB\))/(TAB)/g' 

    Или используйте perl напрямую:

     perl -lpe 's/(?<!\(TAB\))(\(TAB\)){2,8}(?!\(TAB\))/(TAB)/g' 

    AT & T (ast-open) sed с опцией -A / -X поддерживает вид расширенных регулярных выражений, которые они называют дополненными, которые имеют оператор отрицания ( x! ) И оператор сопряжения ( x&y ). Там (.{5}&(\(TAB\))!) Соответствует последовательности из 5 символов, которая не является (TAB) . Таким образом, с этим sed вы можете сделать что-то вроде:

     sed -A ' :1 s/(^.{0,4}|.{5}&(\(TAB\))!)(\(TAB\)){2,8}(.{0,4}$|.{5}&(\(TAB\))!)/\1(TAB)\4/ t1' 
    Interesting Posts

    Проверка числа с десятичной запятой

    Linux и Linux-программное обеспечение: преимущества многоядерного процессора

    Bash -c с позиционными параметрами

    Вывод команды ls, запутанной для исходного изображения KVM на XFS

    Хотите отсортировать файлы по дате обновления, включая подкаталоги

    Создание средней загрузки CPU / GPU / памяти

    Как я могу установить кнопку питания (на корпусе компьютера) для выключения системы с помощью `systemd`?

    Менеджер Synaptic Package не открывается в Awesome WM

    понимание «монтирования» как концепции в ОС

    Неполное обновление на фабрике делает файловую систему btrfs непригодной?

    Измените количество сгенерированных устройств / dev / tty

    Как отладить установленную библиотеку Qt5 с GDB?

    Найти файлы рекурсивно, но выберите наиболее крупные из них с дублирующимися именами

    Awk, результат печати

    Как восстановить raid5 на nas с разделом отказа?

    Linux и Unix - лучшая ОС в мире.