如何使用sed用换行符替换每个第二个制表符

时间:2017-11-12 11:25:18

标签: sed

给出输入

123\t456\tabc\tdef

创建输出

123\t456\nabc\tdef

将显示为

123    456
abc    def

请注意,它需要跨多行工作,而不仅仅是两行。

修改

一个更好的例子可能有助于澄清。

输入(预计只有1行输入)

1\t2\t3\t4\t5\t6\t7\t8

预期产出

1   2
3   4
5   6
7   8
...

3 个答案:

答案 0 :(得分:2)

这个小技巧应该有效:

sed 's/\(\t[^\t]*\)\t/\1\n/g' < input_file.txt

编辑: 以下是一个例子:

$ cat 1.txt
one     two     three   four    five    six     seven
five    six     seven

$ sed 's/\(\t[^\t]*\)\t/\1\n/g' < 1.txt
one     two
three   four
five    six
seven
five    six
seven

$

EDIT2: 对于MacOS&#39;标准sed试试这个:

$ sed $'s/(\t[^\t]*\t/\\1\\\n/g' < 1.txt

$用于替换bash级别的转义字符。

答案 1 :(得分:2)

使用GNU sed:

sed 's/\t/\n/2;P;D;' file

用换行符替换第二次出现的制表符。

答案 2 :(得分:0)

假设以下是Input_file:

cat Input_file
123     456     abc     def

然后将它们分成两列可能会帮助你。

xargs -n2 <  Input_file

输出如下。

123 456
abc def