删除反斜杠+换行符序列

删除反斜杠+换行符序列

我们在 Linux 中有一个文件,其中每条记录包含一行,但是当该行包含一些换行符时就会出现问题。在这种情况下,反斜杠被附加在行尾,并且记录被分成多行。所以下面是我的问题:

"abc def \
xyz pqr"

应该:

"abc def xyz pqr"

我尝试过sed -I 's/\\\n/ /g' <file_name>哪个不起作用。我也尝试了该tr命令,但它只替换一个字符,而不是字符串。您能建议任何命令来处理这个问题吗?

答案1

你应该能够使用

sed -e :a -e '/\\$/N; s/\\\n//; ta'

参见彼得·克鲁明斯的著名的 Sed 俏皮话解释,第一部分,39. 如果一行以反斜杠“\”结尾,则将其追加到下一行

答案2

您可以使用awk

$ awk 'sub(/\\$/,""){printf("%s", $0);next};1' file
"abc def xyz pqr"

答案3

最短的解决方案似乎是使用 perl:

perl -pe 's/\\\n//'

答案4

另一种awk变化

awk '{ORS = /\\/? "": RS; sub(/\\$/, ""); print}' file

相关内容