Как прокомментировать строку на основе слова, с которого оно начинается?

пример содержимого файла:

-------------------- NETWORKING=yes HOSTNAME=wls1.ebs-testsrvrs.com # oracle-rdbms-server-12cR1-preinstall : Add NOZEROCONF=yes NOZEROCONF=yes -------------------- 

Я хочу прокомментировать все строки, начинающиеся с «HOST»

  • Командная строка в режиме vi: заменить все
  • Как я могу подсчитать количество слов в файле, редактируя файл в vim
  • Есть ли у традиционных vi (not vim) поддержка больших файлов?
  • Почему vi явно нарушена (ошибка viminfo E576), и как я могу ее исправить?
  • Ярлык для tabn & tabp в vim / vi
  • Откройте результат `locate` с` vi`
  • Проблемы с обновлением vi внутри экрана
  • Vim - Есть ли способ получить немедленную визуальную обратную связь во время вставки в режиме визуального блока?
  • 5 Solutions collect form web for “Как прокомментировать строку на основе слова, с которого оно начинается?”

    В vi :

     :%s/^HOST/#&/ 

    или

     :g/^HOST/s/^/#/ 

    % В первой команде означает «во всем буфере» и является коротким выражением 1,$ , т.е. от первой строки до последней. & в заменяющей части подстановки будет заменен на весь текст, соответствующий шаблону ( ^HOST ).

    Вторая команда применяет подстановку ( s ) ко всем строкам, соответствующим ^HOST с помощью глобальной ( g ) команды, которую vi унаследовал от редактора ed строк. Во втором случае мы просто вставляем # в начало строки ( ^ ).

    С sed :

     sed 's/^HOST/#&/' input >output 

    или

     sed '/^HOST/s/^/#/' input >output 

    таким же образом, как в vi ( sed всегда применяет все команды к каждой строке входного потока, поэтому мы не используем ничего подобного % или g явно с sed ).

    Используйте sed с опцией -i чтобы отредактировать файл на месте. (Резервная копия оригинала будет сохранена как file.txt.bak ). sed -i.bak 's/^\(HOST.*\)/#\1/g' file.txt

    Чтобы прочитать часть регулярного выражения: The ^ соответствует началу строки.

    () Захватывает соответствующий текст во временную внутреннюю переменную ( \1 ).

    Параметр \ нужен перед ( символами, так как ваша оболочка будет украсть их иначе.

    .* Соответствует 0 или более символам.

    Итак, начиная с фронта линии, он соответствует строке HOST за которой следует любой текст, вплоть до новой строки. Если строка не совпадает, оставьте ее как есть. Если он соответствует, то #\1 будет печатать # за которым следует текст между () .

    Выполнить через awk следующим образом:

     awk '{if($0 ~ /^HOST/){print "#"$0}else{print $0}}' file > file.conf 

    awk будет считывать данные из вашего файла, если строка начинается с HOST она будет печатать строку с # в начале, если не будет печатать ее как есть.

    > для сохранения выходов в file.conf

    Perl один вкладыш:

     perl -pe 's/^HOST/#$&/' file 

    Или, чтобы отредактировать файл на месте:

     perl -i -pe 's/^HOST/#$&/' file 

    объяснение

    Параметр -pe означает p rint каждую строку ввода после применения сценария, заданного -e . s/foo/bar/ является оператором замены и заменит первый экземпляр foo на bar на каждой строке. Здесь мы заменяем строки, начинающиеся с HOST ( ^ означает начало строки) с # и все, что было сопоставлено ( $& – специальная переменная, сохраняющая то, что соответствовало). Итак, мы заменим HOST на #HOST .

    perl однострочный:

     $ perl -ne 'if(/^HOST/){print "#$_"} else { print}' input.txt -------------------- NETWORKING=yes #HOSTNAME=wls1.ebs-testsrvrs.com # oracle-rdbms-server-12cR1-preinstall : Add NOZEROCONF=yes NOZEROCONF=yes -------------------- 

    Этот простой однострочный канал выполняет итерацию по всем строкам, проверяя, начинается ли строка с HOST и добавляет # к ней, иначе мы перейдем к инструкции else , которая просто печатает строку без изменений.

    Версия Python для одной и той же вещи будет следующей:

     python -c "import sys;print '\n'.join([ '#' + l.strip() if l.startswith('HOST') else l.strip() for l in sys.stdin ])" < input.txt 

    Это, однако, работает несколько иначе, путем создания списка (или массива) строк, вставки условной линии или строки с # добавлением. В конечном счете массив объединяется в одну большую строку с элементами, разделенными символами новой строки, и распечатывается.

    Interesting Posts

    Приложение для голосового чата в Интернете

    Изменение прав / dev / tty * при запуске

    CentOS: сетевой интерфейс с несколькими номерами IRQ?

    команда строк печатает некоторые дополнительные символы

    Как вырезать файл за определенное количество секунд?

    Видео-инвертирование подсказки bash

    Оболочка xmllint не показывает число из выражения count xpath?

    Каков правильный способ установки «динамического» PATH в bash? (для android sdk)

    Изменить размер раздела / home и переместить / var / www в новый раздел

    Desktop не блокируется при запуске Virtualbox

    В системах на базе Debian, как мы очищаем файлы конфигурации упаковок, которые уже были удалены?

    Откройте окно терминала Gnome и выполните 2 команды

    Оставьте удаленную команду запущенной для хранения вывода

    Подготовить строки с префиксом файла с помощью sed или awk

    Как определить, какая клавиатура использовалась для нажатия клавиши?

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