2013-11-07 3 views
2

Я совершенно новый для Perl (как в, только начал играть с ним по необходимости сегодня днем), потому что мне приходится иметь дело с большими, громоздкими текстовыми файлами, которые вам нужны для включения в .sql. После работы через пару базовых регулярных выражений поиска/замены операции, я использовал следующую строку:Найти и заменить только в начале строки

s/$/');/g; 

И я закончил с 300k + строк, которые выглядят следующим образом:

');INSERT INTO `test` VALUES('aa1b','MediaWiki1Deletecomment','1',5609'); 

К сожалению. Таким образом, это должно было положить '); в конец каждой строки, но, очевидно, я неправильно понял и застрял в начале и конце строки. Итак, пару вопросов:

  1. Как бы я сделал это правильно? Очевидно, что я недопонимаю s/$/');/g;
  2. Как исправить этот файл сейчас, когда я вставил '); в начале каждой строки, как я выборочно просматриваю каждую строку и удаляю '); в начале строки, а не конец?

Этот Perl/Regex noob благодарит вас!

+1

Ваш шаблон является правильным для добавления ' ');' в конце каждой строки, но '/ G' переключатель не требуется. Вы отметили этот вопрос с помощью '[mysql]', так можно ли предположить, что вы работаете на какой-то Unix-подобной платформе? –

+0

Да, я. Наверное, я неправильно понял, какую функцию на самом деле выполняет/g. – Kale

+1

И чтобы исправить файл, вы можете запустить 's/^ '\); //;' в каждой строке. – Simonize

ответ

3

Самой простая команда, чтобы удалить эти ведущие символы, чтобы использовать ., чтобы соответствовать любому символу и квантор повторить это три раза в начале каждой строки с однострочником:

perl -pe 's/^.{3}//' infile 
+0

Ну что, конечно, сработало. На 100% не уверен, почему, но вы исправили мою проблему и дали мне что-то для исследования. :) Благодаря! – Kale

2

Perl имеет включенное с помощью переключателя -i. Используйте его в вашем случае, как и в

$ perl -i.bak -pe "s/$/');/" *.sql 

Это создаст кучу *.sql.bak резервных копирование файлов с исходным кодом, и измененное содержимое будет в ваших *.sql файлах.

Чтобы исправить уже обливали из них, запустить

$ perl -i.bak -pe "s/^');//" *.sql 
+0

Спасибо за это Грег, я обязательно буду использовать этот метод в будущем. – Kale

Смежные вопросы