Извините, если заголовок недостаточно описательный, но я действительно не знаю, как его суммировать, и любые предложения приветствуются. Я написал полезный кусок регулярного выражения для соответствия строк в файлах sql, которые вставляют данные в определенные таблицы (содержащие кеш). Это выглядит следующим образом:Regex, который не работает с sed
(--\s--\sDumping\sdata\sfor\stable\s`(cache_\w+|cache)`.*?)(?=(--\n--.+Table\sstructure\sfor\stable\s`.+`.*--))
Так что теперь, когда у меня есть файл, как это:
--
-- Table structure for table `cache_content`
--
something
--
-- Dumping data for table `cache_content`
--
INSERT INTO `cache_content` etc.
--
-- Table structure for table `cache`
--
something
--
-- Dumping data for table `cache`
--
INSERT INTO `cache` etc.
--
-- Table structure for table `notcache`
--
something
--
-- Dumping data for table `notcache`
--
Это соответствует все вставки в этих таблицах, и я хотел бы, чтобы удалить их (как те, таблицы с кэшем) с помощью sed
, и, в частности, я написал простой Баш скрипт для этого:
REGEX="(--\s--\sDumping\sdata\sfor\stable\s\`(cache_\w+|cache)\`.*?)(?=(--\n--.+Table\sstructure\sfor\stable\s\`.+\`.*--))"
sed -i "s/${REGEX}//g" $1
Теперь проблема заключается в том, что она работает в моем регулярном выражении тестера, но он не работает на все с sed
. sed
просто не меняет файл вообще, и я оштрафован. Я где-то читал, что sed
является линейным, но может ли это быть проблемой или что-то еще?
Добавлено # 1: Если с sed
невозможно сделать то, что было бы хорошей альтернативой? Это что-нибудь подобное?
Тот факт, что 'sed' основана линия является одной из ваших проблем , это также, вероятно, будет затруднено с '\ s' и' \ w' в вашем регулярном выражении. Вы можете захотеть использовать Perl или какой-то другой язык сценариев вместо bash/sed. –
Вы также используете lookaheads, которые sed не поддерживает. – pobrelkey