Задача SED, объединяющая String, содержащую фигурные скобки

Вы можете сделать это с помощью yum, создав файл репозитория ".repo" для вашей коллекции и запустив yum, временно включающий этот репозиторий при отключении других репозиториев. Вы можете сделать это проще, создав сценарий оболочки для вызова yum при отключении обычных репозиториев. Используйте yum repolist, чтобы получить имена для отключения.

Что-то вроде

#!/bin/sh
yum --disablerepo=foo "$@"

(вы можете перечислить более одной опции --disablerepo). В качестве альтернативы, вы можете отключить все репозитории и включить только те, которые вам нужны, например,

#!/bin/sh
yum --disable-repo='*' --enable-repo=myrepo "$@"

Дальнейшее чтение:

--enablerepo=repoidglob
Включает определенные репозитории по id или glob, которые были отключены в конфигурационном файле с помощью опции отключены в конфигурационном файле с помощью опции enabled=0. Опция конфигурации: enabled

--disablerepo=repoidglob
Отключает определенные репозитории по id или glob. Опция конфигурации: enabled

3
06.09.2019, 14:29
2 ответа

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

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 -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'
3
27.01.2020, 21:12

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

sed 's/\((TAB)\)\{2,8\}/(TAB)/g'
4
27.01.2020, 21:12

Теги

Похожие вопросы