如何从文本文件中删除换行符?
我有以下数据,我需要把它放在一行。
我有这个:
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
将它推回我的剪贴板
在那之后,我会将剪贴板的新内容粘贴到控制台中的任何东西上。