我有嵌入^ A字符的数据问题,我可以使用这个小文件完全重现:
观察我已嵌入^ A个字符.我使用vi和^ V技术将它们放在那里.
现在,请注意我还在第三行的"p,q"字符串后面添加换行符.这是通过Enter键完成的,但它只是放入^ A,我们可以在这里看到:
[ ~/hack ] cat t.csv
a,b,c,d,e
f,g,,i,j
k,l,,n,o
p,q,
,s,t
u,v,w,x,y
[ ~/hack ] xxd < t.csv > u.csv
[ ~/hack ] cat u.csv
0000000: 612c 622c 632c 642c 650a 662c 672c 012c a,b,c,d,e.f,g,.,
0000010: 692c 6a0a 6b2c 6c2c 012c 6e2c 6f0a 702c i,j.k,l,.,n,o.p,
0000020: 712c 0a2c 732c 740a 752c 762c 772c 782c q,.,s,t.u,v,w,x,
0000030: 790a y.
[ ~/hack ]
Run Code Online (Sandbox Code Playgroud)
请注意,对于"cat"列表,双逗号中包含^ A,它只是不会用cat打印到屏幕上.
但另请注意,正常的行尾也是^ A.这就是它变得棘手的地方...... Linux如何区分作为嵌入字符的^ A和作为行尾的字符?
在"e"之后的十六进制转储中的注意事项是0a,如预期的那样.但是'l'和'n'之间的两个逗号之间也有0a.然而,我在'q'和's'之间的手动折线显示了一个实际的换行符 - 但它和其他任何东西一样只是0a!
我的最终需求是我需要以编程方式找到所有断行,如p,q,.,s,t one,并摆脱这些换行符.但是sed看不到这是一个换行符.也就是说,如果我替换^ A,它会看到'f'和'k'行上的那些,但它找不到'p'行上的那些.
所以,1)作为一个概念性的理解问题,有人可以解释地球上的Linux如何知道嵌入的0a字符和行尾的字符之间的区别,以及2)找到的代码片段是什么人工换行和修补线?
谢谢!