Bash Concatenate和替换回车换行符

时间:2016-06-28 14:53:39

标签: bash awk sed

我需要将一系列使用换行符格式化的文本文件转换为由换行符分隔的单行(\ n)。例如:

This is an example text file 
where the contents are separated 
by line breaks

我想要的是:

This is an example text file\nwhere the contents are separated\nby line breaks\n

我愿意使用awk,sed或任何内置的POSIX命令。

3 个答案:

答案 0 :(得分:2)

请尝试此解决方案:

awk 'BEGIN{RS="\n";ORS="\\n"}1' file.txt

我们正在做的是检测记录分隔符,如'\ n',当我们打印时我们使用'\ n',双斜线意味着它必须打印'\ n',强制打印我们使用模式1使用默认操作(打印整个记录)。

如果您有任何问题请告诉我,我没有可用的awk。

答案 1 :(得分:1)

当您说“换行符”时,如果您的意思是“回车”,“换行”或“换行”或其他内容,并且您是否想要用字符串\n替换换行符或者如果您只是想从换行符或其他东西中删除Carriage Returns,但如果是后者,则只需要:

dos2unix file

如果您没有dos2unix,可以使用任何awk:

$ printf 'foo\r\nbar\r\n' | cat -v
foo^M
bar^M

$ printf 'foo\r\nbar\r\n' | awk '{sub(/\r$/,"")}1' | cat -v
foo
bar

您无法使用tr进行强有力的操作,因为它无法判断\r何时位于某一行的末尾,并且您无法使用{sed进行移植1}}。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed '1h;1!H;$!d;x;s/\n/\\n/g' file

将文件粘贴到内存中并引用换行符。