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

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

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

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

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 

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

  • vi: как использовать строку в качестве команды?
  • Как вставить конкретные строки в файл с помощью vim?
  • Проблемы с обновлением vi внутри экрана
  • Как я могу вызвать vi вместо vim
  • Vi на Xenix: почему вместо прокрутки строка перезаписывает текущую строку?
  • Использует ли ctrl + c вместо esc для выхода из режима вставки, что-нибудь в vi?
  • vi - как добавить определенные символы в конце строки
  • Vim - как увеличить число в визуальном блоке?
  • unix vi editor: отображение ^ J
  • Откройте результат `locate` с` vi`
  • Как включить команду «daw» vi в zsh?
  • vim, чтобы открыть файл под курсором в уже открывшемся окне
  • Interesting Posts

    Что означают поля в / proc / net / ipt_hashlimit / FILE?

    Использует ли команда sed команду «a» для префикса переносимой строки?

    Установка php5-curl прерывается из-за сбоя ucf на /etc/php5/mods-available/curl.ini

    Cygwin: выполните установку актуальной проблемы

    Как запросить (из командной строки) информацию об уровне рабочего стола высокого уровня для характеристики системы

    Почему Linux / POSIX есть, но не lchmod?

    Сделать групповые разрешения такими же, как разрешения пользователя

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

    Конфигурация режима Bash vi по умолчанию в режиме команд

    Почему не будет ссылка OpenCL с gcc после установки драйвера fglrx и приложения sdk amd?

    iptraf показывает трафик на UDP / 443, почему?

    При использовании псевдонима SSH, почему SSH игнорирует мой (действительный) билет Kerberos?

    Получить данные строки для несоответствующих значений столбца

    Каковы привилегии Polkit по умолчанию для Arch Linux для остановки, остановки и т. Д. И почему они так?

    Почему «какой рубин» ничего не выводит?

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