我有一些这样的文字
blue chile green morning dawn
red turkey pink morning dawn
white south africa red evening midst & more
我想像这样拆分它(注意管道定界符)
blue child | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more
没有固定宽度,所以我在分区文本时遇到问题
答案 0 :(得分:3)
这可能是你正在寻找的东西:
$ sed -E 's/ {3,}/ | /; s/ */ /g' file
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more
以上假设您的2"字段"由您发布的示例输入中的3个或更多空白字符分隔。它将在GNU或OSX sed中用于-E
以启用ERE。
否则,如果字段确实是固定宽度,因为它显示在您发布的输入中,那么为了提高稳健性,请考虑使用GNU awk进行FIELDWIDTHS:
$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{print $1, $2, $3}' file
blue chile | green | morning dawn
red turkey | pink | morning dawn
white south africa | red | evening midst & more
$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{print $1, $2 $3}' file
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more
$ awk -v FIELDWIDTHS='25 8 999' -v OFS=' | ' '{$0 = $1 OFS $2 $3; gsub(/ +/," ")} 1' file
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more
答案 1 :(得分:1)
如果除了管道分隔符
之外还想标准化空格$ sed -r 's/(.{25})/\1 | /' file | tr -s ' '
blue chile | green morning dawn
red turkey | pink morning dawn
white south africa | red evening midst & more
这符合您的输出,但请注意red turkey
中的额外空格也会被删除。如果您想保留它,则需要额外的步骤。