Sed命令用数字+ \ n +字母替换数字+字母

时间:2016-09-10 07:55:39

标签: bash file sed

我有一个(我认为是一个棘手的)sed问题。

我有一个包含纯文本和数字的文件。

文件中的每个实例,其中有一个数字[0-9]后跟一个CTD的字母,我想要替换它使用相同的数字后跟一个\n字符和相同的字母。

E.g。

551235D 4218789T 435151C

我想用

替换
 551235\nD 4218789\nT 435151\nC

我面临的问题是如何用相同的字母/数字替换每个字母/数字组合。使用我喜欢的内容轻松替换[0-9]后跟CTD,问题是在数字和字母之间插入\n。 ..

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed  's/\([0-9]\)\([DTC]\)/\1\n\2/g' file

使用反向引用。

答案 1 :(得分:0)

sed中,换行符可以通过\转义来替代:

  

A line can be split by substituting a <newline> into it. The application shall escape the <newline> in the replacement by preceding it by a <backslash>.

此外,通过多次使用-e

,可以通过参数轻松添加换行符
  

The commands specified by each -e or -f option shall be added to the script in the order specified. When each addition is made, if the previous addition (if any) was from a -e option, a <newline> shall be inserted before the new addition.

上述任何一项都可以与反向引用替换(\1\2等)结合使用,以分割所需字符之间的行。

$ sed 's/\([0-9]\)\([DTC]\)/\1\
> \2/g'

$ sed -e's/\([0-9]\)\([DTC]\)/\1\' -e'\2/g'