我们在 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