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

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

-------------------- 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 вместо vim
  • Binding Shift-Enter для вставки новой строки без оценки текущего выражения
  • Редактор Vi, поиск и замена сложной строки
  • Является ли изучение текстового редактора, такого как vi, необходимым и все еще стоит того времени?
  • Терминал не понимает некоторые простые команды и пытается установить пакет «sed» после попытки добавить каталог в PATH
  • Как получить только руководство пользователя для Vim
  • поиск и увеличение значений между символом второй тильды и символом третьей тильды в каждой строке файла txt
  • Остановите vim от испортить мой отступ в комментариях
  • Bash Vi-mode: переход к последней косой чертой
  • Определение ключевых последовательностей в Evil-mode Emacs
  • Linux и Unix - лучшая ОС в мире.