Linux / Bash: комментируйте каждую строку, соответствующую шаблону


4

sedчуждо мне, мягко говоря. Я хотел бы просмотреть дерево проекта C и закомментировать каждую строку, вызывающую функцию LogMsg(). Что-то, что могло бы достичь следующего:

foreach: line within *.c
  if: line contains "LogMsg"
    prepend "//"

Или так. Кроме того, я хотел бы посмотреть, смогу ли я добиться обратного, хотя я представляю, что это может быть более трудным.

Я чувствую, что sedэто правильный инструмент для этой работы, но я не эксперт в пакетном редактировании текстовых файлов. Любая помощь?

Ответы:


7

Команда для использования:

 sed '/LogMsg/ s?^?//?' filename  new_filename

Он находит строки в имени файла файла , содержащего LogMsg , и заменяет в начале строки ( ^ ) двойную косую черту. Знак вопроса используется в качестве разделителя вместо обычного слеша, чтобы избежать путаницы с заменяемым текстом. Вывод перенаправляется в новую версию файла вместо стандартного вывода.


Большое спасибо. Это было сжато и правильно. Есть ли подобная команда, которая просто удаляет слэши комментариев, если они появляются в строке с LogMsg ()?
musasabi

s? противоположность s ^ Я так понимаю?
musasabi

@musasabi Нет. Знак вопроса - это просто разделитель. Строка, начинающаяся с s, означает: заменить // ничем. ? идентифицирует, где строка, которая будет заменена, и ее замена, начало и конец. И да, лучший обратный вариант (забудьте про приведенное выше: sed 'LogMsg / s? ^ //? ^?' Filename> new_filename. Шляпа ^ указывает начало строки, знак доллара $ указывает конец строки.
MariusMatutiae
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.