有没有办法使用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$
答案 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
打印(最后)行