Unix Shell - 删除特殊的换行符

时间:2013-12-29 22:41:09

标签: shell unix sed

我们正在接收一个文件,该文件用\(换行符)和带有\(制表符)字符的列分隔成行。

当文件的某个“字段”中存在手动换行符时,它会以带有两个反斜杠的特殊换行符(\\换行符)形式出现。

要删除特殊标签\(标签),我们正在使用此sed命令,该命令可正常工作:

sed "s/$(printf '\\\\\t')/ /g"

新行的相应命令不会:

sed "s/$(printf '\\\\\n')/ /g" 

它不会删除\ n,只删除它之前的反斜杠。是否需要进行特殊处理才能删除\(换行符)?

澄清:正常的换行符格式如下:

\(newline)

需要删除的特殊字符是

\\(newline)

2 个答案:

答案 0 :(得分:3)

你走了:

echo -e 'hello\\\nthere' | perl -ne 's/\\\n/ /; print'

sed中执行此操作很困难(但可能),因为sed逐行处理输入,并且您的数据被分成多行。这个perl一行代码逐行处理输入,并且由于它将换行符视为行的一部分,因此它可以执行空格替换,我认为这具有您想要的效果。

或者如果您更喜欢awk

echo -e 'hello\\\nthere' | awk '{ if (gsub(/\\$/, " ")) printf; else print }'

起初我怀疑你的“特殊换行符”字符只是字符串\\n,就像在这个命令的输出中一样:

echo 'hello\\nthere'

您可以使用以下空格替换字符串\\n

echo 'hello\\nthere' | sed -e 's/\\\\n/ /g'

答案 1 :(得分:1)

您也可以使用tr (translate)命令执行此操作,例如

tr '\n' ' ' < inputfile.txt

编辑:在这种情况下,请使用

tr '\\\n' ' ' < inputfile.txt