如何从文本文件中删除换行符?

我有以下数据,我需要把它放在一行。

我有这个:

22791 ; 14336 ; 22821 ; 34653 ; 21491 ; 25522 ; 33238 ; 

我需要这个:

 22791;14336;22821;34653;21491;25522;33238; 

编辑

没有这些命令是完美的。

他们大多数都是这样的数据:

 22791 ;14336 ;22821 ;34653 ;21491 ;25522 
 tr -d '\n' < yourfile.txt 

编辑:

如果这里所发布的命令都不起作用,那么除了分隔字段的换行符之外,还有其他的东西。 可能你在文件中有DOS / Windows行结束符(尽pipe我期望Perl解决scheme在这种情况下工作)?

尝试:

 tr -d "\n\r" < yourfile.txt 

如果这不起作用,那么你将不得不更仔细地检查你的文件(例如在一个hex编辑器中)以找出你想要删除的字符。

 paste -sd "" file.txt 
 perl -p -i -e 's/\R//g;' filename 

必须做的工作。

 tr -d '\n' < file.txt 

要么

 awk '{ printf "%s", $0 }' file.txt 

要么

 sed ':a;N;$!ba;s/\n//g' file.txt 

这里的这个页面有很多其他方法来删除换行符。

编辑删除猫的虐待:)

使用

 head -n 1 filename | od -c 

去判断是什么罪名。 然后使用

 tr -d '\n' <filename 

为LF

 tr -d '\r\n' <filename 

为CRLF

如果数据在file.txt中,那么:

 echo $(<file.txt) | tr -d ' ' 

' $(<file.txt) '读取文件,并将内容作为一系列“回声”,然后与它们之间的空间回声。 'tr'命令然后删除任何空格:

 22791;14336;22821;34653;21491;25522;33238; 

使用man 1 ed:

 # cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed ed -s file <<< $'1,$j\n,p' # print to stdout ed -s file <<< $'1,$j\nwq' # in-place edit 

xargs消耗换行符(但添加了最后的换行符):

 xargs < file.txt | tr -d ' ' 

您可以在vim中编辑文件:

 $ vim inputfile :%s/\n//g 

假设你只想保留数字和分号,假设没有主要的编码问题,下面的代码应该可以做到,尽pipe它也会删除最后一个“换行符”:

 $ tr -cd ";0-9" 

你可以很容易地修改上面的内容来包含其他字符,例如,如果你想保留小数点,逗号等

书呆子事实:用ASCII代替。

 tr -d '\012' < filename.extension 

(编辑原因我没有看到friggin的答案有相同的解决scheme,唯一的区别是,我的ASCII)

  $ perl -0777 -pe's / \ n + // g'input>输出 
  $ perl -0777 -pe'tr / \ n // d'input>输出 

我会用awk来做,例如

 awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt 

(缺点是a在内存中“积累”)。

编辑

忘记了printf! 所以也是

 awk '/[0-9]+/ { printf "%s;", $0 }' file.txt 

或者可能更好,在awk中已经给出了另一个答案。

我通常得到这个用例,当我从一个文件复制一个代码片段,我想粘贴到一个控制台,而不添加不必要的新行,我结束了做一个bash别名
(如果你好奇,我oneline它叫做oneline

 xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i 
  • xsel -b -o读取我的剪贴板

  • tr -d '\n'删除新行

  • tr -s ' '删除重复出现的空格

  • xsel -b -i将它推回我的剪贴板

在那之后,我会将剪贴板的新内容粘贴到控制台中的任何东西上。