Как заменить несколько вхождений шаблона с помощью sed

Я использую следующую команду для удаления окружающих пространств между ключами массива, которые являются строками или целыми числами в файлах PHP:

sed -ri "s/\[ ([0-9]+|(\x27|\x22).*(\x27|\x22)) \]/[\1]/g" file.php

Я думал, что я покрыл все базы, но он не работает, когда в одной строке есть несколько скобок массивов. Итак:

if ( $myarray[ 'id' ] == 7 && $myarray[ 'status' ] == true )

Становится следующим:

if ( $myarray['id' ] == 7 && $myarray[ 'status'] == true )

Когда это должно выглядеть так:

if ( $myarray['id'] == 7 && $myarray['status'] == true )

Это удаление пространства справа для первого набора скобок и пробела слева для второго набора.

Как изменить команду, чтобы она заменила пробелы между всеми скобками массива в каждой строке для всего файла?

  • Удалить имя файла при рекурсивном подсчете числа вхождений шаблона
  • Как извлечь первую часть имен файлов с тем же суффиксом?
  • Уменьшить использование файлов в текстовой обработке
  • Выберите последний файл, основанный на порядковом номере, указанном в имени файла
  • Получить текст между словом и последней строкой?
  • Как найти и заменить шаблон ВНУТРИ конкретного шаблона с помощью sed
  • Удалить строку, содержащую определенную строку, и следующую строку
  • вырезать последние два с sed?
  • One Solution collect form web for “Как заменить несколько вхождений шаблона с помощью sed”

    Ваша проблема исходит от .* . Если вы соответствуете только любому персонажу, который не является «или a», он будет работать: sed -ri "s/\[ ([0-9]+|(\x27|\x22)[^\x27\x22]*(\x27|\x22)) \]/[\1]/g" file.php

    Еще лучше (принять во внимание «или»):

     sed -ri "s/\[ ([0-9]+|(\x27|\x22)[^\2]*(\2)) \]/[\1]/g" file.php 
    Interesting Posts

    openldap: добавить вспомогательный класс

    Может ли Apt удалить пакеты, которые необходимы программному обеспечению, которое пользователи установили из источника?

    Socat открывает TCP только при открытии PTY

    ppd-файл для deskjet 1050

    Удалите файл с знаками фунта вокруг него

    Как переместить каталог в существующий каталог?

    Должен ли я заменить свой двоичный код системы PHP в / usr / bin самокомпилированным?

    RHEL как синхронизировать сетевые настройки между графическим интерфейсом и файлами конфигурации в / etc / sysconfig / network-scripts /?

    Удалите строки из файла до шаблона, если шаблон не существует

    Создание строк слов с разделителями пространства из вырезанного выражения

    Объединение большого количества файлов

    zipimport.ZipImportError: невозможно распаковать данные; zlib недоступно

    Сервер SSH на Ubuntu не работает

    Одновременное подключение к одному IP через два сетевых интерфейса

    как заставить rsync делать жесткие ссылки на исходный каталог, а также создавать резервные копии измененных файлов?

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