Как я могу конвертировать комментарии SQL с - в #, используя Perl? - PullRequest
2 голосов
/ 30 апреля 2010

UPDATE:

Вот что работает!

fgrep -ircl --include=*.sql -- -- *

У меня есть различные файлы SQL с комментариями «-», и мы перешли на последнюю версию MySQL, и эти комментарии ненавидят. Я хочу заменить - на #.

Я ищу рекурсивную замену на одну строку.

Вот что у меня есть:

perl -p -i -e 's/--/# /g'` ``fgrep -- -- *  

Пример файла .sql:

use myDB;

--did you get an error

Я получаю следующую ошибку:

Нераспознанный переключатель: --did (-h покажет допустимые параметры).

p.s: fgrep пропустить 2 тире было просто обсуждается здесь , если вы заинтересованы.

Любая помощь приветствуется.

Ответы [ 3 ]

4 голосов
/ 30 апреля 2010

Я бы использовал комбинацию find и на месте sed

find . -name '*.sql' -exec sed -i -e "s/^--/#/" '{}' \;

Обратите внимание, что он будет заменять только строки , начиная с , на --
Регулярное выражение станет намного сложнее, если вы не захотите заменить это, например:

INSERT INTO stuff VALUES (...) -- values used for xyz

потому что -- также может быть в ваших данных (я думаю, вы не хотите их заменять)

INSERT INTO stuff VALUES (42, "<!-- sboing -->") -- values used for xyz
4 голосов
/ 30 апреля 2010

Аргументами командной строки после аргумента -e 's/.../.../' должны быть имена файлов. Используйте fgrep -l, чтобы вернуть имена файлов, которые содержат шаблон:

perl -p -i -e 's/--/# /g' `fgrep -l -- -- * `
1 голос
/ 30 апреля 2010

Эквивалент этого в форме сценария:

#!/usr/bin/perl -i
use warnings;
use strict;

while(<>) {
    s/--/# /g;
    print;

}

Если у меня есть несколько файлов с комментариями в форме --comment и я передаю любое количество имен этому сценарию, они заменяются на # comment Вы можете использовать find, ls, grep и т. Д., Чтобы найти файлы ...

Нет ничего плохого в использовании 1 вкладыша.

Это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...