Linux - 删除换行符

时间:2015-01-16 12:57:41

标签: linux linefeed

有没有办法使用linux命令删除下面显示的LF。 每行应以字符串'F |'开头。我的Oracle数据库中不幸的多行存储有十六进制0a LF,在spool处导致换行。

由于

$grep -nvB 1 '^F|' File.txt
4720156-F|29|204380|A|16060|Telephone Updated by DCA|99996319        ,
4720157:                                                        |manual|
--
6005453-F|29|121389|A|16060|Telephone Updated by DCA|96844599        ,
6005454:                                                        |new|
--
6354243-F|29|366910|A|16060|Telephone Updated by DCA|
6354244:                                                        |new|
--
13318314-F|29|397713|A|16060|Telephone Updated by DCA|97597079        ,
13318315:                                                       ,52094436|new|
--
13471591-F|29|17945|A|16060|Telephone Updated by DCA|47990248,94291610,
13471592:                                                       |new|
--
13471607-F|29|152501|A|16060|Telephone Updated by DCA|
13471608:                                                       ,90290027,38297606|new|
--
13944867-F|29|322564|A|16060|Telephone Updated by DCA|
13944868:                                                       |new|
User@db01.test processed$

1 个答案:

答案 0 :(得分:0)

因此,您希望不以F|开头的行连接到之前的行(确实如此)。 sed的解决方案:

sed -n '/^F|/{x;2,$p;be};x;G;s/\n//;h;:e;${g;p}' File.txt
  • /^F|/如果行以F|开头:
    • x交换保留和模式空间的内容
    • 2,$p如果不是第一行:打印(先前保留的)行
    • be分支以标记e
  • 否则(行不以F|开头):
    • x交换保留和模式空间的内容
    • G为图案空间添加保留空间(连接的线条,但仍然嵌入LF)
    • s/\n//删除LF
    • h复制模式空间(连接线)以容纳空间
  • :e标签e(以上两种情况都可以到此处):
    • $如果最后一行:
    • g将保留空间复制到图案空间
    • p打印(最后)行