У меня есть файл выгрузки базы данных с полем, разделенным символом ‹TAB>. Я запускаю этот файл через sed, чтобы заменить любые вхождения ‹TAB>‹TAB> на ‹TAB>\N‹TAB>. Это связано с тем, что когда файл загружается в MySQL, \N интерпретируется как NULL.
Команда sed 's/\t\t/\t\N\t/g;' почти работает, за исключением того, что он заменяет только первый экземпляр, например. "...‹TAB>‹TAB>‹TAB>..." становится "...‹TAB>\N‹TAB>‹TAB>...".
Если я использую 's/\t\t/\t\N\t/g;s/\t\t/\t\N\t/g;' он заменяет больше экземпляров.
У меня есть мнение, что, несмотря на модификатор /g, это как-то связано с тем, что конец одного совпадения является началом другого.
Может ли кто-нибудь объяснить, что происходит, и предложить команду sed, которая будет работать, или мне нужно зациклиться.
Я знаю, что, вероятно, мог бы переключиться на awk, perl, python, но я хочу знать, что происходит в sed.
s/a/b/&s/b/a/
? (Я использую & в качестве разделителя команд, чтобы указать, что обе операции должны выполняться одновременно.) - person tripleee   schedule 14.09.2011s/something/something or other/
иsed
выполняются очень долго (точнее, не хватает памяти)! - person Jonathan Leffler   schedule 14.09.2011\t
=a
и\N
=b
, тоaaa
в первой подстановке будет заменено наabaa
, а во второй - наababa
. Таким образом, для замены всех случаев не требуется никакого цикла, достаточно двух приложений одной и той же глобальной замены. - person potong   schedule 04.07.2020