Intereting Posts
ArchLinux: Ошибка установки grub на зашифрованном разделе lvm (lvm on luks) Проблема с резольвером? mv для записи Проблема туннелирования X с удаленной машины Перехват ввода и вывода из определенного исполняемого файла перемещать IP-адрес с одного интерфейса на другой без перерыва Скрипт оболочки для комментирования и раскомментирования строки в файле Добавить порядковый номер за данными Использование разности, aka overlay, aka union, файловая система с возможностью фиксации Какой раздел монтируется там где? Почему люди рекомендуют использовать параметр -j3 при использовании двухъядерного процессора? Что означает «WHIRLPOOL size ;-)»? Как я могу войти на один и тот же удаленный сервер с двумя разными именами пользователей через ключ-логин от одного и того же локального пользователя? Ядро делает ошибку: «извините, не реализовано: -mfloat-abi = hard и VFP» Найдите процесс, который потребляет память

Команда командной строки для добавления пробела к регулярному выражению

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

Пример:

xadsfa 1 - 2 --- --- --- AB jklhwj 3 --- --- --- asdfh weriulceh 2 - 4 --- --- --- asdf 

Я хочу совместить «1 -2» или «2 – 4». Я придумал эту схему:

 [0-9]\s-\s[0-9] 

Теперь я хотел бы добавить белое пространство для каждого матча, например:

 xadsfa 1 - 2 --- --- --- AB jklhwj 3 --- --- --- asdfh weriulceh 2 - 4 --- --- --- asdf 

Это тривиально с помощью инструмента sed :

 $ sed 's/[0-9]\s-\s[0-9]/& /' file xadsfa 1 - 2 --- --- --- AB jklhwj 3 --- --- --- asdfh weriulceh 2 - 4 --- --- --- asdf 

Оператор s/foo/bar/ заменит первое вхождение foo на bar в каждой строке входного файла. Если вы хотите совместить все случаи на данной строке, используйте g : s/foo/bar/g . & Is «все, что было сопоставлено», поэтому s/[0-9]\s-\s[0-9]/& / заменит первое совпадение вашего регулярного выражения с тем, что было сопоставлено с одним пробелом.

Обратите внимание: если вы просто сопоставляете одно пространство (не вкладки или другие пробелы), нет смысла использовать \s . Просто используйте пробелы:

 sed 's/[0-9] - [0-9]/& /' file 

Наконец, чтобы внести изменения в сам файл, используйте -i (это предполагает GNU sed , синтаксис немного отличается от других реализаций, также это заменит ваш файл результатом операции sed. Убедитесь, что он делает то, что вы перед добавлением -i ):

 sed -i 's/[0-9] - [0-9]/& /' file