我有一个数据库卸载文件,其字段用<TAB>字符分隔.我通过sed运行此文件,用<TAB>\N <TAB>替换<TAB> <TAB>的任何出现.这样,当文件加载到MySQL时,\ N被解释为NULL.
sed命令的/\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中发生了什么.
我知道你想要 sed,但 sed 根本不喜欢这个,似乎它特别(参见这里)不会做你想做的事。然而,perl 会做到这一点(据我所知):
perl -pe 'while (s#\t\t#\t\n\t#) {}' <filename>
Run Code Online (Sandbox Code Playgroud)