Найпростіший спосіб коментувати / коментувати певні рядки за допомогою командного рядка


37

Чи є можливість коментувати / коментувати сценарій shell / config / ruby ​​за допомогою командного рядка?

наприклад:

$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf

це додасть або видалить #знак bla.confon-line 14до 18. Зазвичай я використовую sed, але я повинен знати вміст цих рядків, а потім зробити операцію пошуку-заміни, і це дало б неправильний результат, коли голки є більше ніж однієї (і ми хочемо лише замінити N-ту один).


1
Існує Л до цього Q під назвою: Розкоментувати кілька рядків коду, зазначеного номера рядків, використовуючи VI або Vim , який показує безліч способів зробити це з допомогою sed, perlі т.д. У зокрема, А по terdon!
slm

Відповіді:


46

Коментувати рядки з 2 по 4 сайту bla.conf:

sed -i '2,4 s/^/#/' bla.conf

Щоб зробити команду, яку ви хотіли, просто покладіть вище в сценарій оболонки під назвою comment:

#!/bin/sh
sed -i "$1"' s/^/#/' "$2"

Цей сценарій використовується так само, як і ваш, за винятком того, що перший і останній рядки повинні бути розділені комою, а не тире. Наприклад:

comment 2,4 bla.conf

Команда для коментарів може бути створена аналогічно.

Розширена функція

sedВибір лінії досить потужний. Окрім того, щоб вказати перший та останній рядки за номером, також можна вказати їх за допомогою регулярного вираження. Отже, якщо ви хочете командувати всіма рядками від того, що містить, fooдо того, що містить bar, використовуйте:

comment '/foo/,/bar/' bla.conf

Системи BSD (OSX)

З BSD sed -iопція потребує аргументу, навіть якщо це лише порожній рядок. Так, наприклад, замініть верхню команду вище на:

sed -i '' '2,4 s/^/#/' bla.conf

І замініть команду в сценарії на:

sed -i '' "$1"' s/^/#/' "$2"

1
Чи є подвійний 'після -iваріанту навмисним? Вони не потребували їх.
raphinesse


2

Ви можете використовувати Vim в режимі Ex:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g глобальний вираз

  2. s замінник

  3. x зберегти і закрити


2

Ви можете створити файл bash_file з функціями, щоб повторно використовувати його у своїх проектах

#!/bin/bash

# your target file
CONFIG=./config.txt

# comment target
comment() {
  sed -i '' "s/^$1/#$1/" $CONFIG
}

# comment target
uncomment() {
  echo $1
  sed -i '' "s/^#$1/$1/" $CONFIG
}


# Use it so:
uncomment enable_uart
comment arm_freq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.