Как удалить комментарии из файла, используя "grep"? - PullRequest
2 голосов
/ 18 октября 2011

У меня есть файл SQL, который мне нужен, чтобы удалить все комментарии

-- Sql comment line

Как мне добиться этого в Linux с помощью GREP или другого инструмента?

С наилучшими пожеланиями,

Ответы [ 3 ]

10 голосов
/ 18 октября 2011

Инструмент grep имеет опцию -v, которая меняет смысл фильтра. Например:

grep -v pax people

выдаст вам все строки в файле people, которые не содержат pax.

Пример:

grep -v '^ *-- ' oldfile >newfile

, который избавляется от строк с единственным пробелом перед маркером комментария. Это не будет однако изменяет строки как:

select blah blah -- comment here.

Если бы вы хотели это сделать, вы бы использовали что-то вроде sed:

sed -e 's/ --.*$//' oldfile >newfile

, которая редактирует каждую строку, удаляя любые символы от " --" до конца строки.

Имейте в виду, что вам нужно быть осторожным с поиском строки " --" в real SQL-выражениях, таких как (надуманные):

select ' -- ' | colm from blah blah blah

Если они у вас есть, лучше создать / использовать синтаксический анализатор SQL, а не простой инструмент для модификации текста.


Стенограмма sed в действии:

pax$ echo '
...> this is a line with -- on it.
...> this is not
...> and -- this is again' | sed -e 's/ --.*$//'

this is a line with
this is not
and

Для grep:

pax$ echo '
  -- this line starts with it.
this line does not
and -- this one is not at the start' | grep -v '^ *-- '

this line does not
and -- this one is not at the start
1 голос
/ 18 октября 2011

Вы можете использовать команду sed как sed -i '/\-\-/d' <filename>

0 голосов
/ 18 октября 2011

Попробуйте использовать sed на оболочке:

sed -e "s/(--.*)//" sql.filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...