我们正在接收一个文件,该文件用\(换行符)和带有\(制表符)字符的列分隔成行。
当文件的某个“字段”中存在手动换行符时,它会以带有两个反斜杠的特殊换行符(\\换行符)形式出现。
要删除特殊标签\(标签),我们正在使用此sed命令,该命令可正常工作:
sed "s/$(printf '\\\\\t')/ /g"
新行的相应命令不会:
sed "s/$(printf '\\\\\n')/ /g"
它不会删除\ n,只删除它之前的反斜杠。是否需要进行特殊处理才能删除\(换行符)?
澄清:正常的换行符格式如下:
\(newline)
需要删除的特殊字符是
\\(newline)
答案 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