Я видел это на днях:

sed --in-place '/en_US.UTF-8/s/^# //' /etc/locale.gen

Я все понимаю, кроме '/en_US.UTF-8/s/^# //' . Я понимаю en_US.UTF-8 но что его окружает. Похоже, RegEx.

2 ответа2

4
sed                            # stream editor

--in-place                     # save changes to same filename

'/en_US.UTF-8/s/^# //'         # program/script for sed 

    /en_US.UTF-8/              # on any line that contains this text
    s/^# //                    # remove any initial 'comment' designator

/etc/locale.gen                # filename to be read then replaced

Поэтому он раскомментирует en_US.UTF-8 в файле locale.gen .

Существует справочная страница для sed которая объясняет это. Есть много онлайн-введений в sed, которые бы охватили это.

2

Я все понимаю, кроме '/en_US.UTF-8/s/^# //'

Предполагая, что это правильно, он удаляет # и пробел в начале строк, которые содержат en_US.UTF-8 где - то в них.

Так получается, например:

# en_US.UTF-8 foo bar
# foo bar en_US.UTF-8

В это:

en_US.UTF-8 foo bar
foo bar en_US.UTF-8

Сломать:

  • ' ' - Нормальная часть команды sed .
  • /en_US.UTF-8/ - искать строки с en_US.UTF-8 в них.
  • s - команда подстановки.
  • /^# / - Регулярное выражение. Если строка начинается с # и пробела ...
  • // - Замена заготовки. Превращает # и пробел в ... ничего (без символа - удаляется!).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .