2010-06-28 64 views
66

我有以下数据,我需要把它全部放在一行。如何从文本文件中删除换行符?

我有这样的:

22791 

; 

14336 

; 

22821 

; 

34653 

; 

21491 

; 

25522 

; 

33238 

; 

我需要这样的:

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

编辑

这些命令没有被正常使用。

他们大多让这样的数据:

22791 

;14336 

;22821 

;34653 

;21491 

;25522 
+11

复制粘贴到浏览器的地址栏或其他文本字段中。 Quick'n'dirty但适用于少量数据。 – ignis 2013-02-20 14:58:22

回答

141
tr -d '\n' < yourfile.txt 

编辑:

如果没有在此发布的命令都工作,那么你有超过一个换行符分离的领域以外的东西。可能你在文件中有DOS/Windows行结束符(尽管我希望即使在这种情况下Perl解决方案也能工作)?

尝试:

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

如果不工作,那么你将有更密切地检查你的文件(例如,在十六进制编辑器)来找出哪些字符实际上是有你想要删除。

+0

这最后一个工程!谢谢... 这些数据来自apache日志文件!...其实我不知道它是否在Windows上生成...我的uni的老师给我做功课! – Alucard 2010-06-28 20:47:45

+17

我希望删除这些换行符不是您的实际功课! – 2010-06-28 22:45:21

+1

第二个与\ r为我工作! – techblu3 2016-07-07 20:24:01

4
tr -d '\n' < file.txt 

或者

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

或者

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

本页面here有一堆的其他方法去除换行。

编辑删除猫虐待:)

+2

正确,但猫科动物滥用。 – 2010-06-28 17:54:16

+0

以前从未听过这个词。感谢您指出:) – 2010-06-28 17:56:16

0
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
6
paste -sd "" file.txt 
+1

在Solaris(10)上,'paste -sd“”'在默认情况下不能在STDIN上运行,所以如果你用管道连接到它,请使用: '(some command)| paste -sd“”-' – JohnGH 2013-07-29 09:32:08

+0

如果你还想删除* final *换行符,这不起作用。它只会删除中间换行符。 – josch 2017-09-01 14:11:44

+0

据我所知,使用'paste -sd'\ 0''更便携... – Sundeep 2017-12-26 12:24:22

0

我会使用awk,例如做

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

(一个缺点是,在存储器中 “累积”)。

编辑

忘记关于printf!所以也

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

或可能更好,它已经在另一个使用awk的答案。

1

如果数据在文件中。TXT,则:

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

在“$(<file.txt)”读取文件,并给出了内容作为一系列词,其“回响”,然后用它们之间的空间相呼应的。在 'TR' 命令,然后删除空格:

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

只要输入不是太大,只要你使用Bash(为Bash标记,所以没关系)。如果我现在写答案,它会是'tr -d'\ n' 2015-09-05 15:41:28

1

使用人1版:

# 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 
6
perl -p -i -e 's/\R//g;' filename 

必须做的工作。

1

xargs消耗换行符以及(但增加了一个最终结尾的新行):

xargs < file.txt | tr -d ' ' 
3

使用

head -n 1 filename | od -c 

到图什么是有问题的字符。 然后用

tr -d '\n' <filename 

为LF

tr -d '\r\n' <filename 

为CRLF

2

您可以编辑VIM文件:

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

假设你只希望保留数字和分号,假设没有主要的编码问题,以下应该做的伎俩h它也将删除最后一个“换行符”:

$ tr -cd ";0-9" 

您可以轻松修改上述内容以包含其他字符,例如:如果你想保留小数点,逗号等等

1

书呆子的事实:用ASCII代替。

tr -d '\012' < filename.extension 

(编辑因为我没有看到过相同的解决方案中受诅咒的回答,唯一不同的是我的了ASCII)

0

我通常当我从复制的代码片断这个用例一个文件,我想将它粘贴到一个控制台而不增加不必要的新的生产线,最后我做一个bash别名
(我把它叫做oneline如果你是好奇)

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

  • tr -d '\n'去除新线

  • tr -s ' '删除重复的空间

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

后,我会贴上新剪贴板的内容变成控制台中的oneline或其他内容。

1

使用gedit文本编辑器(3.18.3)

  1. 点击搜索
  2. 点击查找和替换...
  3. 输入\n\s查找
  4. 离开替换为空白(无)
  5. 检查正则表达式
  6. 点击查找按钮

注:这不正好解决了OP的原始,7岁的问题,而是应该帮助一些小白Linux用户(比如我)他们在SE中以类似的方式在这里找到了他们的方式,“我怎样才能让我的文本全部在一行上”的问题。